SQLでデータを扱う際、文字列を数値に変換する必要が生じることがあります。例えば、ユーザー入力やインポートされたデータが文字列形式で保存されている場合、数値として処理するために変換が必要です。本記事では、MySQL、PostgreSQL、SQL Server、およびOracleの各データベースにおいて、文字列を数値に変換する方法を具体例と共に詳しく解説します。
以下のSELECTは表示結果を変換する例であり、保存済みの列の型や値を書き換えるものではありません。金額などで小数が必要なら、整数型や既定の小数桁に頼らずDECIMAL(10,2)など目的に合う型を明示します。電話番号・郵便番号など先頭ゼロに意味がある識別子は、数値化すべきか先に判断してください。
MySQLでの変換方法
MySQLで文字列を数値に変換する方法は、CAST関数やCONVERT関数を使用することが一般的です。以下に具体的な例を示します。
CAST関数を使用する
CAST関数を使って文字列を数値に変換する方法は次の通りです。
SELECT CAST('1234' AS UNSIGNED);このクエリは、文字列 ‘1234’ を整数に変換します。UNSIGNEDをSIGNEDやDECIMALに変更することで、異なる数値型に変換することも可能です。
CONVERT関数を使用する
CONVERT関数を使って文字列を数値に変換する方法もあります。
SELECT CONVERT('1234', UNSIGNED);このクエリも、文字列 ‘1234’ を整数に変換します。UNSIGNEDの部分を他の数値型に変更して利用することができます。
実際の使用例
例えば、テーブル users に保存されている文字列形式の年齢データを数値に変換して扱う場合は次のようになります。
SELECT user_id, CAST(age AS UNSIGNED) AS numeric_age FROM users;このクエリは、users テーブルから各ユーザーの user_id と、文字列形式で保存されている age を数値に変換した numeric_age を取得します。
PostgreSQLでの変換方法
PostgreSQLで文字列を数値に変換する方法は、CAST関数や::演算子を使用することが一般的です。以下に具体的な例を示します。
CAST関数を使用する
CAST関数を使って文字列を数値に変換する方法は次の通りです。
SELECT CAST('1234' AS INTEGER);このクエリは、文字列 ‘1234’ を整数に変換します。INTEGERをNUMERICやFLOATに変更することで、異なる数値型に変換することも可能です。
::演算子を使用する
::演算子を使って文字列を数値に変換する方法もあります。
SELECT '1234'::INTEGER;このクエリも、文字列 ‘1234’ を整数に変換します。INTEGERの部分を他の数値型に変更して利用することができます。
実際の使用例
例えば、テーブル orders に保存されている文字列形式の金額データを数値に変換して扱う場合は次のようになります。
SELECT order_id, CAST(amount AS NUMERIC) AS numeric_amount FROM orders;このクエリは、orders テーブルから各注文の order_id と、文字列形式で保存されている amount を数値に変換した numeric_amount を取得します。
SQL Serverでの変換方法
SQL Serverで文字列を数値に変換する方法は、CAST関数やCONVERT関数を使用することが一般的です。以下に具体的な例を示します。
CAST関数を使用する
CAST関数を使って文字列を数値に変換する方法は次の通りです。
SELECT CAST('1234' AS INT);このクエリは、文字列 ‘1234’ を整数に変換します。INTをDECIMALやFLOATに変更することで、異なる数値型に変換することも可能です。
CONVERT関数を使用する
CONVERT関数を使って文字列を数値に変換する方法もあります。
SELECT CONVERT(INT, '1234');このクエリも、文字列 ‘1234’ を整数に変換します。第1引数を他の数値型に変更して利用することができます。
実際の使用例
例えば、テーブル sales に保存されている文字列形式の売上データを数値に変換して扱う場合は次のようになります。
SELECT sale_id, CAST(sale_amount AS DECIMAL(10, 2)) AS numeric_sale_amount FROM sales;このクエリは、sales テーブルから各売上の sale_id と、文字列形式で保存されている sale_amount を数値に変換した numeric_sale_amount を取得します。
Oracleでの変換方法
Oracleで文字列を数値に変換する方法は、TO_NUMBER関数を使用することが一般的です。以下に具体的な例を示します。
TO_NUMBER関数を使用する
TO_NUMBER関数を使って文字列を数値に変換する方法は次の通りです。
SELECT TO_NUMBER('1234') FROM dual;このクエリは、文字列 ‘1234’ を数値に変換します。TO_NUMBER関数にはフォーマットモデルを指定することも可能です。
フォーマットモデルを使用する
TO_NUMBER関数にフォーマットモデルを指定して文字列を数値に変換する方法もあります。
SELECT TO_NUMBER('1,234.56', '9,999.99') FROM dual;このクエリは、カンマと小数点が含まれた文字列 ‘1,234.56’ を数値に変換します。
実際の使用例
例えば、テーブル employees に保存されている文字列形式の給与データを数値に変換して扱う場合は次のようになります。
SELECT employee_id, TO_NUMBER(salary) AS numeric_salary FROM employees;このクエリは、employees テーブルから各従業員の employee_id と、文字列形式で保存されている salary を数値に変換した numeric_salary を取得します。
エラー処理と注意点
文字列を数値に変換する際には、様々なエラーが発生する可能性があります。ここでは、一般的なエラーとそれを回避するための方法を説明します。
不正な文字列形式
不正な文字列の扱いは製品・SQLモード・変換先の型によって異なります。エラーになる場合だけでなく、MySQLでは数値の先頭部分や0への変換と警告になる場合もあるため、結果が返っただけで正常な数値と判断しないでください。元の文字列を残し、空文字・符号・桁区切り・指数表記・範囲外の値を分けて検証します。
SELECT column_name,
TRY_CONVERT(INT, NULLIF(LTRIM(RTRIM(column_name)), '')) AS numeric_column
FROM table_name;SQL ServerのISNUMERIC=1はINTへ変換できる保証ではありません。小数・通貨など他の数値型としての判定も含むため、目的の型をTRY_CONVERTに指定します。上の例は空白だけの文字列をNULLにしてからINT変換を試し、通常の変換失敗もNULLにします。元からNULL・空欄・不正値は同じ結果になり得るので、元の列を併せて確認してください。明示的に禁止された型間変換など、TRY_CONVERTでもエラーになる条件はあります。
NULL値の処理
文字列がNULLの場合、変換結果もNULLになります。NULL値が問題になる場合は、デフォルト値を設定するなどの対策が必要です。
SELECT COALESCE(CAST(column_name AS INT), 0) AS numeric_column
FROM table_name;このCASTの例は入力が有効な数値文字列またはNULLであることが前提で、COALESCEは変換エラーを捕捉しません。NULLを0にすると「不明」と「ゼロ」を区別できなくなるため、業務上同じ扱いでよい場合だけ使います。INT構文はここではSQL Server等の例であり、MySQLのCASTへそのまま使う説明ではありません。
トランケーションエラー
範囲外はオーバーフローや変換エラー、丸めなどにつながり、製品ごとに挙動が異なります。文字数が10以下でも数字とは限らず、10桁の整数がINTの範囲に収まるとも限りません。小数を保持する場合はDECIMAL(p,s)などの精度と小数桁数を明示してください。
-- Oracle 19c example
SELECT column_name,
TO_NUMBER(column_name DEFAULT NULL ON CONVERSION ERROR) AS numeric_column
FROM table_name;Oracle 19cのこの例は、文字列からNUMBERへの変換失敗をNULLとして扱います。入力式そのものの評価エラーや、後で別の狭い数値列へ格納する際の制約まで解決する機能ではありません。小数点・桁区切りがある値はフォーマットモデルとNLS設定も確認してください。
注意点
- 使用するデータベースによって関数や方法が異なるため、データベース固有のドキュメントを参照することが重要です。
- 大量のデータを変換する場合、パフォーマンスへの影響を考慮してバッチ処理やインデックスの使用を検討する必要があります。
まとめ
SQLで文字列を数値に変換する方法について、主要なデータベースごとに具体的な手法を解説しました。MySQLではCASTやCONVERT、PostgreSQLではCASTや::演算子、SQL ServerではCASTやCONVERT、OracleではTO_NUMBER関数を使用します。各データベースでの変換方法を理解し、適切な手法を選択することで、データの整合性を保ちながら効率的なデータ操作が可能になります。変換時のエラー処理や注意点を考慮し、実際のデータに合わせた対策を行うことが重要です。
公式資料:TRY_CONVERT/ISNUMERIC/MySQL CAST/Oracle TO_NUMBER。2026年10月20日確認。



コメント