CAST / CONVERT
| 対応: | SQL-92(1992) |
|---|
値のデータ型を別の型に変換する関数・式です。文字列を数値に変換したり、日付を文字列として取り出したりするときに使用します。
構文
値を指定した型に変換します(標準SQL)。
SELECT CAST(値 AS 型);
文字コードを変換します(MySQL の CONVERT 本来の用途)。
SELECT CONVERT(値 USING 文字コード);
型変換も行えます(MySQL 独自拡張)。
SELECT CONVERT(値, 型);
構文一覧
| 構文 | 概要 |
|---|---|
| CAST(値 AS SIGNED) | 値を符号付き整数に変換します(MySQL)。 |
| CAST(値 AS UNSIGNED) | 値を符号なし整数に変換します(MySQL)。 |
| CAST(値 AS DECIMAL(p,s)) | 値を精度 p・小数点以下 s 桁の固定小数点数に変換します。 |
| CAST(値 AS CHAR) | 値を文字列に変換します。 |
| CAST(値 AS DATE) | 値を日付型に変換します。 |
| CAST(値 AS DATETIME) | 値を日時型に変換します。 |
| CAST(値 AS INTEGER) | 値を整数に変換します(標準SQL・PostgreSQL)。 |
サンプルコード
CSVファイルなどから外部データを取り込むと、数値や日付も全て文字列として格納されることがあります。文字列のままでは計算や日付の比較が正しく行えないため、『CAST』で適切な型に変換する必要があります。
以下の『products』テーブルと『sales_import』テーブルを例に説明します。『sales_import』は外部から取り込んだデータで、金額が文字列(amount_str)として格納されています。
文字列の『'12345'』を整数に変換して計算します。『SIGNED』は符号付き整数(正負の値を扱える整数型)を意味します。文字列のままでは『+ 100』のような計算ができないため、『CAST』で数値に変換してから加算しています。
sample_cast_convert.sql
SELECT CAST('12345' AS SIGNED) + 100 AS result;
+--------+ | result | +--------+ | 12445 | +--------+ 1 row in set
整数を文字列に変換して結合します。
sample_cast_convert.sql
SELECT CONCAT('注文番号: ', CAST(order_id AS CHAR)) AS label
FROM sales_import;
+-------------+ | label | +-------------+ | 注文番号: 1 | | 注文番号: 2 | +-------------+ 2 rows in set
文字列を日付型に変換して比較します。
sample_cast_convert.sql
SELECT order_id, order_date
FROM sales_import
WHERE CAST(order_date AS DATE) >= CAST('2025-10-01' AS DATE);
+----------+------------+ | order_id | order_date | +----------+------------+ | 1 | 2025-10-01 | | 2 | 2025-10-05 | +----------+------------+ 2 rows in set
価格を小数点2桁に丸めて表示します。
sample_cast_convert.sql
SELECT product_name,
CAST(price AS DECIMAL(10, 2)) AS price_decimal
FROM products;
+--------------+---------------+ | product_name | price_decimal | +--------------+---------------+ | ノートPC | 89800.00 | | マウス | 2980.00 | | キーボード | 5500.00 | +--------------+---------------+ 3 rows in set
文字列の数値列を合計します(型変換で集計できます)。
sample_cast_convert.sql
SELECT SUM(CAST(amount_str AS DECIMAL(12, 2))) AS total FROM sales_import;
+----------+ | total | +----------+ | 23500.00 | +----------+ 1 row in set
データベース別の書き方
『CAST』は MySQL・PostgreSQL・SQLite で共通して使用できます(標準SQL)。ただし指定できる型名はデータベースごとに異なります。
MySQL では『SIGNED』『UNSIGNED』が使えます。
SELECT CAST('12345' AS SIGNED) + 100 AS result;
PostgreSQL では『INTEGER』『NUMERIC』『TEXT』などを使います。
SELECT CAST('12345' AS INTEGER) + 100 AS result;
PostgreSQL では『CAST』の代わりに『::』演算子で型変換できます。
SELECT '12345'::INTEGER + 100 AS result; SELECT order_date::TEXT FROM sales_import;
SQLite では『INTEGER』『REAL』『TEXT』などの内部型を指定します。
SELECT CAST('12345' AS INTEGER) + 100 AS result;
概要
『CAST』は標準SQLで定義されており、MySQLでもPostgreSQLでも利用できます。データを外部から取り込んだ際に数値が文字列として格納されていたり、フォーマットが異なったりする場合に型変換が必要になります。
MySQLの『CONVERT(値, 型)』は『CAST』と同等の型変換を行う独自の書き方です。一方、『CONVERT(値 USING utf8mb4)』は文字コードを変換するための構文で、用途が異なります。
日付を任意の書式に整形するには『EXTRACT / FORMAT』を、NULL値の変換・置換には『COALESCE / NULLIF』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。