【SQLServer】文字列型を数値型に変換する方法を解説!

スポンサーリンク

SQLServerでデータを扱う際、文字列(VARCHARNVARCHAR)の値を数値型(INT DECIMAL など)に変換したい場面はよくあります。たとえば、以下のようなケースが考えられます。

  • 数値が文字列として保存されているが、計算を行いたい
  • 数値として比較や集計をしたいが、カラムのデータ型が文字列になっている
  • データ入力時に型の統一がされておらず、明示的に変換する必要がある

SQL Serverでは、CASTCONVERT を使って簡単に文字列を数値型に変換できます。また、変換時にエラーを回避する方法として TRY_CASTTRY_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引数を指定することで、日付やフォーマット変換に応用可能(数値変換では不要)

変換時の注意点

文字列を数値型に変換する際、いくつかの注意点があります。特に、変換できない値が含まれている場合はエラーが発生するため、適切な対策が必要です。

変換エラーが発生するケース

以下のようなケースでは、CASTCONVERT を使用するとエラーになります。

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_CASTTRY_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 に変換
  • ISNUMERICTRY_PARSE で事前チェック(ただし ISNUMERIC は一部の特殊文字を許容するため注意)
SELECT * FROM Users WHERE TRY_CAST(Age AS INT) > 20;

まとめ

本記事では、SQL Serverで文字列を数値型に変換する方法について解説しました。

文字列を数値型に変換する際は、データの特性やエラーハンドリングを考慮して、適切な関数を選びましょう。エラーを回避しながら効率的にデータを扱うことで、SQL Serverの操作をよりスムーズに進めることができます!

コメント