BINARY
演算子はそれに続いて、バイナリ
ストリングにストリングをキャストします。これはカラムの比較を強制的に、文字ごとでなくバイトごとに行わせる簡易な方法です。カラムが
BINARY
または BLOB
と定義されていない場合でも、大文字小文字を区別した比較になります。BINARY
もまた、後続のスペースを重要なものにします。
mysql>SELECT 'a' = 'A';
-> 1 mysql>SELECT BINARY 'a' = 'A';
-> 0 mysql>SELECT 'a' = 'a ';
-> 1 mysql>SELECT BINARY 'a' = 'a ';
-> 0
比較において、BINARY
は演算全体に影響を与えます。同じ結果を持つどちらのオペランドの前にでも、与えることができます。
BINARY
は、str
CAST(
の省略表記です。
str
AS
BINARY)
コンテキストのあるものでは、インデックス付きのカラムを
BINARY
にキャストした場合、MySQL
はそのインデックスを有効に使うことができません。
CAST(
,
expr
AS
type
)CONVERT(
,
expr
,type
)CONVERT(
expr
USING
transcoding_name
)
CAST()
および
CONVERT()
関数はひとつのタイプの値をもって、他のタイプの値を生成します。
その type
は次の値のどれかになりえます :
BINARY[(
N
)]
CHAR[(
N
)]
DATE
DATETIME
DECIMAL
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]
BINARY
は、BINARY
データ
タイプを持つストリングを生成します。これが比較に及ぼす影響については
項10.4.2. 「BINARY
と VARBINARY
タイプ」
をご覧ください。任意の長さ
N
が与えられた場合、BINARY(
は、キャストが N
)N
バイト以下の引数を使用する原因となります。N
バイトより短い値は、0x00
バイトで N
の長さまでパッドされます。
CHAR(
句は、キャストが N
)N
文字以下の引数を使用する原因になります。
CAST()
および CONVERT(... USING
...)
は標準の SQL
シンタックスです。CONVERT()
の非
USING
フォームは ODBC
シンタックスです。
USING
を持つ
CONVERT()
は、異なる文字セット間のデータを変換するのに使用されます。MySQL
では、符号化名は対応文字セット名と同じものです。例えば、このステートメントは、デフォルトの文字セットのストリング
'abc'
を、utf8
文字セットの対応ストリングに変換します。
SELECT CONVERT('abc' USING utf8);
バイナリ
ストリングは文字セットを持たないため、通常は
BLOB
値、またはバイナリ
ストリングを、大文字小文字の区別のない方法で比較はできず、従って大文字小文字という概念はありません。大文字小文字を区別しない比較を行うには、CONVERT()
関数を使用して、値を非バイナリ
ストリングに変換します。結果の文字セットが大文字小文字を区別しない照合を得た場合、LIKE
演算は大文字小文字の区別をしません :
SELECT 'A' LIKE CONVERT(blob_col
USING latin1) FROMtbl_name
;
異なる文字セットを使用するには、先行するステートメントで、その名前を
latin1
の代わりにします。大文字小文字の区別のない照合を確実に使用するには、CONVERT()
呼び出しの後に COLLATE
句を特定します。
CONVERT()
を、異なる文字セットで示されているストリングの比較に、より一般的に使用することができます。
キャスト関数は、CREATE ... SELECT
文で、特定のタイプのカラム作成したい場合に役立ちます
:
CREATE TABLE new_table SELECT CAST('2000-01-01' AS DATE);
この関数はまた、ENUM
カラムを語彙順にソートしたい場合にも利用できます。通常は、ENUM
カラムのソートは内部数値を使用して行います。値を
CHAR
にキャストすると、結果は語彙順になります :
SELECTenum_col
FROMtbl_name
ORDER BY CAST(enum_col
AS CHAR);
CAST(
は str
AS BINARY)BINARY
と同じものです。str
CAST(
は式を、デフォルトの文字セットを持つストリングとして扱います。
expr
AS CHAR)
CONCAT('Date: ',CAST(NOW() AS DATE))
のようなより複雑な式の一部として使用する場合、CAST()
もまた結果を変えます。
データを異なるフォーマットに抽出するには、CAST()
ではなく、LEFT()
または
EXTRACT()
のようなストリング関数を使用します。詳細は
項11.5. 「日付時刻関数」
を参照してください。
ストリングを数値コンテキストの数値にキャストするには、通常はストリング値を数字のように使用するだけで済みます。
mysql> SELECT 1+'1';
-> 2
ストリング
コンテキストで数字を使用する場合、その数字は自動的に
BINARY
ストリングに変換されます。
mysql> SELECT CONCAT('hello you ',2);
-> 'hello you 2'
MySQL は、符号付きでも、符号無しでも、64
バイト値での演算をサポートします。算術演算子
( +
または -
など )
を使用しており、演算のひとつは符号のない整数である場合、結果は符合なしになります。SIGNED
および UNSIGNED
キャスト演算子を使用して、演算を符号付き、もしくは符号なしの
64
ビットの整数にキャストすることで、これをそれぞれオーバーライドすることができます。
mysql>SELECT CAST(1-2 AS UNSIGNED)
-> 18446744073709551615 mysql>SELECT CAST(CAST(1-2 AS UNSIGNED) AS SIGNED);
-> -1
オペランドのどちらかが浮動小数点値で有る場合、結果は浮動小数点値になり、前のルールには影響を受けません。(
このコンテキストでは、DECIMAL
カラム値は浮動小数点値とみなされます。)
mysql> SELECT CAST(1 AS UNSIGNED) - 2.0;
-> -1.0
算術演算でストリングを使用している場合、これは浮動小数点数に変換されます。
「zero」
日付ストリングを日付に変換する場合、CONVERT()
と CAST()
は NULL
を戻し、NO_ZERO_DATE
SQL
モードが有効になれば警告を発行します。