SQLServerでデータを扱う際、文字列(VARCHAR
や NVARCHAR
)の値を数値型(INT
や DECIMAL
など)に変換したい場面はよくあります。たとえば、以下のようなケースが考えられます。
- 数値が文字列として保存されているが、計算を行いたい
- 数値として比較や集計をしたいが、カラムのデータ型が文字列になっている
- データ入力時に型の統一がされておらず、明示的に変換する必要がある
SQL Serverでは、CAST
や CONVERT
を使って簡単に文字列を数値型に変換できます。また、変換時にエラーを回避する方法として TRY_CAST
や TRY_CONVERT
も利用できます。
この記事では、これらの関数の使い方と注意点について、具体的なSQLの例を交えて解説していきます。
文字列を数値に変換する方法
SQL Serverでは、文字列を数値型に変換するために CAST
関数 と CONVERT
関数 を使用できます。それぞれの特徴と使い方を解説します。
CAST関数を使う方法
CAST
関数は、データ型を明示的に変換するための標準的なSQL関数です。以下のように使用します。
SELECT CAST('123' AS INT) AS ConvertedValue;
出力結果
ConvertedValue
--------------
123
特徴
- SQL標準に準拠している
- シンプルな構文で分かりやすい
NULL
を含むデータの場合、変換できない値はエラーになる
CONVERT関数を使う方法
CONVERT
関数は、SQL Server独自のデータ型変換関数で、書式設定が可能な点が特徴です。
SELECT CONVERT(INT, '123') AS ConvertedValue;
出力結果
ConvertedValue
--------------
123
特徴
- SQL Server固有の関数
CAST
と同様に型変換を行う- 第3引数を指定することで、日付やフォーマット変換に応用可能(数値変換では不要)
変換時の注意点
文字列を数値型に変換する際、いくつかの注意点があります。特に、変換できない値が含まれている場合はエラーが発生するため、適切な対策が必要です。
変換エラーが発生するケース
以下のようなケースでは、CAST
や CONVERT
を使用するとエラーになります。
SELECT CAST('abc' AS INT);
SELECT CONVERT(INT, '123abc');
エラーメッセージの例
Conversion failed when converting the varchar value 'abc' to data type int.
これは、文字列 'abc'
や '123abc'
が数値に変換できないためです。また、NULL 値を変換しようとすると、NULL のままとなります。
SELECT CAST(NULL AS INT);
結果
NULL
エラーを回避する方法
エラーを防ぐには、TRY_CAST
や TRY_CONVERT
を使用すると便利です。これらの関数は、変換できない場合に NULL
を返すため、安全に処理できます。
SELECT TRY_CAST('abc' AS INT) AS ConvertedValue;
SELECT TRY_CONVERT(INT, '123abc') AS ConvertedValue;
結果
ConvertedValue
--------------
NULL
TRY_ 系関数のメリット
- 変換できない値を
NULL
にすることで、処理の途中でエラーが発生しにくくなる COALESCE
と組み合わせてデフォルト値を設定できる
SELECT COALESCE(TRY_CAST('abc' AS INT), 0) AS ConvertedValue;
結果
ConvertedValue
--------------
0
WHERE句での数値変換時の注意
データベースのクエリで WHERE
句内で数値変換を行う場合、エラーが発生する可能性があるため注意が必要です。例えば、以下のクエリはエラーになります。
SELECT * FROM Users WHERE CAST(Age AS INT) > 20;
解決策
TRY_CAST
を使って NULL に変換ISNUMERIC
やTRY_PARSE
で事前チェック(ただしISNUMERIC
は一部の特殊文字を許容するため注意)
SELECT * FROM Users WHERE TRY_CAST(Age AS INT) > 20;
まとめ
本記事では、SQL Serverで文字列を数値型に変換する方法について解説しました。
文字列を数値型に変換する際は、データの特性やエラーハンドリングを考慮して、適切な関数を選びましょう。エラーを回避しながら効率的にデータを扱うことで、SQL Serverの操作をよりスムーズに進めることができます!
コメント