SQLでデータを扱う際、文字列を数値に変換する必要が生じることがあります。例えば、ユーザー入力やインポートされたデータが文字列形式で保存されている場合、数値として処理するために変換が必要です。本記事では、MySQL、PostgreSQL、SQL Server、およびOracleの各データベースにおいて、文字列を数値に変換する方法を具体例と共に詳しく解説します。
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 を取得します。
エラー処理と注意点
文字列を数値に変換する際には、様々なエラーが発生する可能性があります。ここでは、一般的なエラーとそれを回避するための方法を説明します。
不正な文字列形式
不正な文字列が含まれている場合、変換は失敗します。例えば、アルファベットや特殊文字が数値に含まれている場合です。このようなケースでは、変換前にデータをクレンジングする必要があります。
SELECT CASE
WHEN ISNUMERIC(column_name) = 1 THEN CAST(column_name AS INT)
ELSE NULL
END AS numeric_column
FROM table_name;このクエリは、SQL ServerにおいてISNUMERIC関数を使用して、数値に変換可能な文字列のみを変換します。
NULL値の処理
文字列がNULLの場合、変換結果もNULLになります。NULL値が問題になる場合は、デフォルト値を設定するなどの対策が必要です。
SELECT COALESCE(CAST(column_name AS INT), 0) AS numeric_column
FROM table_name;このクエリは、NULL値が含まれている場合にデフォルト値として0を設定します。
トランケーションエラー
変換する文字列が対象の数値型の範囲を超える場合、トランケーションエラーが発生します。事前に文字列の長さや値を確認することが重要です。
SELECT CASE
WHEN LENGTH(column_name) <= 10 THEN TO_NUMBER(column_name)
ELSE NULL
END AS numeric_column
FROM table_name;このクエリは、Oracleにおいて長さが10文字以内の文字列のみを数値に変換します。
注意点
- 使用するデータベースによって関数や方法が異なるため、データベース固有のドキュメントを参照することが重要です。
- 大量のデータを変換する場合、パフォーマンスへの影響を考慮してバッチ処理やインデックスの使用を検討する必要があります。
まとめ
SQLで文字列を数値に変換する方法について、主要なデータベースごとに具体的な手法を解説しました。MySQLではCASTやCONVERT、PostgreSQLではCASTや::演算子、SQL ServerではCASTやCONVERT、OracleではTO_NUMBER関数を使用します。各データベースでの変換方法を理解し、適切な手法を選択することで、データの整合性を保ちながら効率的なデータ操作が可能になります。変換時のエラー処理や注意点を考慮し、実際のデータに合わせた対策を行うことが重要です。

コメント