CAST()
関数と CONVERT()
関数は、あるデータ型の値から別のデータ型の値を生成する目的で使用することができます。構文は以下のとおりです。
CAST(expression AS type) CONVERT(expression,type) CONVERT(expr USING transcoding_name)
type
には、次のいずれかのデータ型を指定できます。
BINARY
CHAR
DATE
DATETIME
SIGNED {INTEGER}
TIME
UNSIGNED {INTEGER}
CAST()
と CONVERT()
は
MySQL 4.0.2 以降で使用することができます。
変換型 CHAR
は 4.0.6
以降で使用可能です。 USING
を指定する CONVERT()
は、4.1.0
以降で使用可能です。
CAST()
と CONVERT(... USING
...)
は SQL-99 の構文です。
USING
を指定しない
CONVERT()
は ODBC の構文です。
キャスト関数は、CREATE ... SELECT
ステートメントで特定の型のカラムを作成する必要があるときに役立ちます。
CREATE TABLE new_table SELECT CAST('2000-01-01' AS DATE);
また、キャスト関数は ENUM
型のカラムを語彙の順序でソートするときにも役立ちます。通常、ENUM
型のカラムのソートは、内部の数値に基づいて行われます。値を
CHAR
型にキャストすると、語彙の順序でソートされるようになります。
SELECT enum_col FROM tbl_name ORDER BY CAST(enum_col AS CHAR);
CAST(string AS BINARY)
は BINARY
string
と同じです。 CAST(expr AS
CHAR)
では、指定した式がデフォルトのキャラクタセットの文字列として扱われます。
注意: MysQL 4.0
では、DATE
、DATETIME
、TIME
型のカラムに CAST()
操作を行った場合、カラムが特定の型としてマークされるだけで、カラム値が変わるわけではありません。
MySQL 4.1.0 では、カラム値は、ユーザに送られるときに適切なカラム型に変換されます(これは、クライアントへの日付情報の送信における、4.1 の新しいプロトコルの機能です)。
mysql> SELECT CAST(NOW() AS DATE);
-> 2003-05-26
後続の MySQL バージョン(おそらく 4.1.2 か
5.0)では、CONCAT("Date: ",CAST(NOW() AS
DATE))
のような、より複雑な式の一部として
CAST
を使用した場合にも、結果のデータ型が適切に変換されるよう修正する予定です。
データを別の形式で取り出すときには、CAST()
は使用せず、代わりに、LEFT
や
EXTRACT()
のような文字列関数を使用してください。 See
項6.3.4. 「日付と時刻関数」。
文字列を数値にキャストするときには、通常は、特に何もしないで、そのままその文字列を数値として使用します。
mysql> SELECT 1+'1';
-> 2
文字列のコンテキストで数値を使用すると、数値は
BINARY
文字列に自動で変換されます。
mysql> SELECT CONCAT("hello you ",2);
-> "hello you 2"
MySQL
では、符号付きと符号なしのどちらでも、64
ビット値の演算をサポートしています。
数値演算(+
など)でどちらか一方のオペランドが
unsigned integer
の場合、結果の値は符号なしになります。
ただし、キャスト演算子 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
算術演算に文字列を使用すると、その文字列は浮動小数点数に変換されます。
符号なしの値の扱いについては、BIGINT
型の値に適切に対応するよう、MySQL 4.0
で変更されました。MySQL 4.0 と 3.23
の両方で実行するコードがあるとき(通常、この場合、CAST()
関数は使用できない)、次の方法によって、2
つの符号なし整数カラムの減算の実行時に符号付きの結果値を得ることができます。
SELECT (unsigned_column_1+0.0)-(unsigned_column_2+0.0);
この方法では、減算の実行前に両方のカラムを浮動小数点型に変換しています。
以前の MySQL アプリケーションの
UNSIGNED
型のカラムを MySQL 4.0
に移植した場合に問題があるときは、mysqld
の起動時に
--sql-mode=NO_UNSIGNED_SUBTRACTION
オプションを指定します。注意:
このオプションを指定した場合、BIGINT
UNSIGNED
カラム型を効率的に使用することはできません。
USING
を指定する
CONVERT()
は、データのキャラクタセットを別のキャラクタセットに変換するときに使用します。MySQL
では、トランスコーディング名は対応するキャラクタセット名と同じです。たとえば、次のステートメントでは、サーバのデフォルトのキャラクタセットに基づく文字列
'abc'
が、utf8
キャラクタセットの対応する文字列に変換されます。
SELECT CONVERT('abc' USING utf8);
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.