MySQL @Wiki 実用リファレンス

CAST、CONVERT

最終更新:

my-sql

- view
管理者のみ編集可


CAST、CONVERT

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() のような文字列関数を使用してください。
文字列を数値にキャストするときには、通常は、特に何もしないで、そのままその文字列を数値として使用します。
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);


記事メニュー
目安箱バナー