SQLServerエラーメッセージ241が表示された場合文字列から日付や時刻を変換するときに変換に失敗しました 、文字列を日付/時刻の値に変換しようとしているが、その特定の文字列を日付/時刻の値に変換できないことが原因である可能性があります。
エラーの例
エラーを生成するコードの例を次に示します。
SELECT CAST('Tomorrow' AS date);
結果:
Msg 241, Level 16, State 1, Line 1 Conversion failed when converting date and/or time from character string.
ここでは、文字列Tomorrow
を変換しようとしました date
へ 入力しますが、Tomorrow
date
に変換できる有効な日付ではありません タイプ。
SQLServerは文字列をdate
に変換できません そのため、エラーが返されました。
ソリューション1
これを修正する最も明白な方法は、文字列を実際の日付に似るように変更することです。
列を渡す場合は、正しい列があることを確認してください。変数を渡す場合も同じです–それが正しい変数であることを確認してください。
たとえば、次の変換は成功します:
SELECT CAST('20 Feb 2030' AS date);
結果:
2030-02-20
入力した日付の形式によっては、CONVERT()
を使用した方がよい場合があります。 関数。これにより、入力日付式の形式を指定できます。
例:
SELECT
CONVERT(date, '03/02/2030', 101) AS 'US with century',
CONVERT(date, '03/02/30', 1) AS 'US without century',
CONVERT(date, '03/02/2030', 103) AS 'British with century',
CONVERT(date, '03/02/30', 3) AS 'US without century';
結果:
+-------------------+----------------------+------------------------+----------------------+ | US with century | US without century | British with century | US without century | |-------------------+----------------------+------------------------+----------------------| | 2030-03-02 | 2030-03-02 | 2030-02-03 | 2030-02-03 | +-------------------+----------------------+------------------------+----------------------+
ソリューション2
エラーに対処する別の方法は、TRY_CAST()
のいずれかを使用することです。 またはTRY_CONVERT()
。これらの関数はNULL
を返します エラーの代わりに。
例:
SELECT TRY_CAST('Tomorrow' AS date);
結果:
NULL
ただし、これは必ずしも根本的な問題に対処するものではなく、単にそれを隠すだけです。変換はまだ実行できませんでした。
いずれにせよ、ニーズによっては、それでも実行可能なオプションである可能性があります。
ソリューション3
エラーに対処する別の方法は、文字列を別のデータ型に変換することです。明らかに、これはdate
で終わる場合には良くありません タイプしますが、誤ってdate
を指定したためにエラーが発生した可能性があります 他のタイプの代わりにタイプします。
例:
SELECT CAST('Wednesday' AS char(3));
結果:
Wed