sql >> データベース >  >> RDS >> Sqlserver

SQLServerのメッセージ241「文字列から日付や時刻を変換するときに変換に失敗しました」を修正

    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

    1. MySQLエラー1064を修正する方法

    2. バックグラウンドスレッドでSQLiteクエリを非同期で実行するにはどうすればよいですか?

    3. Microsoft Accessは2020年も引き続き関連性がありますか?

    4. MariaDBサーバー10.5の新機能