SQL Serverでデータ型を変換するとき、同じことをしているように見えるさまざまな関数に遭遇します。ただし、通常、これらの機能には違いがあり、一見しただけではわからない場合があります。この例は、CAST()
の違いです。 およびTRY_CAST()
機能。
この記事では、SQLServerを使用する場合のこれらの関数の違いについて説明します。
CAST()
の主な違い およびTRY_CAST()
関数は、変換できないデータを処理する方法にあります。
CAST()関数
CAST()
関数は、あるデータ型の式を別のデータ型に変換します。これにより、異なるデータ型の2つの値を連結するなどのことができます。このように:
SELECT 'Comments: ' + CAST(9 AS varchar(12)) AS Result;
結果:
Result ----------- Comments: 9
これは、データを変換できる場合に正常に機能します。しかし、データを変換できない場合はどうなりますか?
その場合、次のようになります:
SELECT 'Comments: ' + CAST(10.00 AS varchar(1)) AS Result;
結果:
Error: Arithmetic overflow error converting numeric to data type varchar.
これは十分に公平です。SQLServerがデータを変換できない場合は、知っておく必要があります。
ただし、それを行う別の方法があります。
TRY_CAST()関数
TRY_CAST()
関数はCAST()
と同じように機能します ただし、データを変換できない場合は、null
が返されます。 (CAST()
のようなエラーをスローする代わりに する):
SELECT 'Comments: ' + TRY_CAST(10.00 AS varchar(1)) AS Result;
結果:
Result ------ null
これは、条件付きプログラミングを使用して、データを変換できるかどうかに応じてアプリケーションが異なるタスクを実行する場合に便利です。
例:
SELECT CASE WHEN TRY_CAST(10.00 AS varchar(2)) IS NULL THEN 'Cast failed' ELSE 'Cast succeeded' END AS Result;
結果:
Result ----------- Cast failed
無効なデータ型
TRY_CAST()
関数は、有効なデータ型を使用する場合にのみこのように機能します。したがって、許可されていないデータ型を明示的に指定すると、エラーが発生します。
例:
SELECT 'Comments: ' + TRY_CAST(10.00 AS Miami) AS Result;
結果:
Error: Type Miami is not a defined system type.