Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

CAST / CONVERT

値のデータ型を別の型に変換する関数・式です。文字列を数値に変換したり、日付を文字列として取り出したりするときに使用します。

構文
-- 値を指定した型に変換します(標準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)。
サンプルコード
-- 文字列の数値を整数に変換して計算します。
SELECT CAST('12345' AS SIGNED) + 100 AS result;

-- 整数を文字列に変換して結合します。
SELECT CONCAT('注文番号: ', CAST(order_id AS CHAR)) AS label
FROM orders;

-- 文字列を日付型に変換して比較します。
SELECT order_id, order_date
FROM orders
WHERE order_date >= CAST('2025-01-01' AS DATE);

-- 価格を小数点2桁に丸めて表示します。
SELECT product_name,
       CAST(price AS DECIMAL(10, 2)) AS price_decimal
FROM products;

-- 文字列の数値列を合計します(型変換で集計できます)。
SELECT SUM(CAST(amount_str AS DECIMAL(12, 2))) AS total
FROM sales_import;
実行結果
-- SELECT CAST('12345' AS SIGNED) + 100 AS result; の結果例
-- +--------+
-- | result |
-- +--------+
-- |  12445 |
-- +--------+

-- 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 |
-- +--------------+---------------+
データベース別の書き方

『CAST』は MySQL・PostgreSQL・Oracle・SQL Server・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;

-- SQL Server: INT / DECIMAL / VARCHAR などを使います。
SELECT CAST('12345' AS INT) + 100 AS result;

PostgreSQL では『CAST』の代わりに『::』演算子で型変換できます。

-- PostgreSQL: :: 演算子で型変換します。
SELECT '12345'::INTEGER + 100 AS result;
SELECT order_date::TEXT FROM orders;

SQL Server の『CONVERT』は MySQL とは構文が異なり、日付の書式指定ができます。

-- SQL Server: CONVERT(型, 値, スタイル) の順です。
SELECT CONVERT(VARCHAR, order_date, 111) AS formatted_date FROM orders;
-- 結果例: 2025/01/15

Oracle では『TO_NUMBER』『TO_CHAR』『TO_DATE』といった専用の変換関数がよく使われます。

-- Oracle: 専用の変換関数を使います。
SELECT TO_NUMBER('12345') + 100 AS result FROM DUAL;
SELECT TO_CHAR(order_date, 'YYYY-MM-DD') AS formatted_date FROM orders;
概要

『CAST』は標準SQLで定義されており、MySQLでもPostgreSQLでも利用できます。データを外部から取り込んだ際に数値が文字列として格納されていたり、フォーマットが異なったりする場合に型変換が必要になります。

MySQLの『CONVERT(値, 型)』はCASSTと同等の型変換を行う独自の書き方です。一方、『CONVERT(値 USING utf8mb4)』は文字コードを変換するための構文で、用途が異なります。

日付を任意の書式に整形するには『EXTRACT / FORMAT』を、NULL値の変換・置換には『COALESCE / NULLIF』を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。