修正方法‘文字列から日付または時刻、あるいはその両方を変換するときに変換が失敗しました’ エラー?

日付と時刻が希望する形式で表示されない場合や、クエリの出力がビューアのニーズに合わない場合が多くあります。必要に応じて日付文字列をフォーマットするSQL Serverの組み込み機能がいくつかありますが、文字列がSQL Serverによって解釈され、変換エラーを回避するには、適切なフォーマットにする必要があります。日付や時刻を文字列から変換しようとすると以下のエラーが時々発生します。「日付や時刻を文字列から変換するときに変換に失敗しました。」

日時変換エラー

上記のエラーは通常、日付リテラルが適切でなく、文字列からDateTimeまたは日付に変換できない場合に発生します。このエラーは、いくつかの理由が原因で発生します。これについては、ソリューションセットとともに詳しく説明します。

例1:

イギリスの日付と時刻の表記では、SQL Serverの組み込み機能の「変換」機能を使用してフォーマットスタイル103で実現できる日月年形式(2015年1月10日または2015年10月1日)を使用して日付が表示されます。

以下の例では、提供された日付文字列の形式が間違っていることがわかります。1つ目は、月、日、昨年のエラーであり、SQL Serverで解釈できないためエラーが発生します。「103」の日付スタイルを使用したUKスタイルの日付変換の正しい形式は「dd / mm / yyyy」です。

間違ったフォーマット:

@date_time_value varchar(100)= '10 / 16/2015 21:02:04 'を宣言しますCONVERT(datetime2、@date_time_value、103)をUK_Date_Time_Styleとして選択します

正しいフォーマット:

イギリスとフランスの日付形式は、103 =“ dd / mm / yyyy”または3 =” dd / mm / yy”です。ここで103と3は日付スタイルです。

宣言@date_time_value varchar(100)= '10 / 1/15 21:02:04 'select CONVERT(datetime2、@date_time_value、103)as Date_Time_Style
@date_time_value varchar(100)= '10 / 1/15 21:02:04 'を宣言しますCONVERT(datetime2、@date_time_value、3)をUK_Date_Time_Styleとして選択します

例2:

SQLサーバーで文字列から日付への変換がエラーになる場合があります。これは、使用されている日付または時刻の形式が原因ではなく、スキームに受け入れられない誤った情報を保存しようとしていることが原因です。

間違った日付:

次のエラーの理由は、2019年にはうるう年ではないため、「2月29日」などの日付がないためです。

宣言@date_time_value varchar(100)= '2019-02-29 21:02:04' select cast(@date_time_value as datetime2)as date_time_value

正しいもの:

宣言@date_time_value varchar(100)= '2019-02-28 21:02:04' select cast(@date_time_value as datetime2)as date_time_value

ISO 8601日付形式:

日付の値を操作するために多数の形式を使用できますが、グローバル/インターナショナルマスで作業する場合、日時表現を選択することは使いやすさの問題になる可能性があります。したがって、カルチャ固有の日付/時刻リテラルは避けてください。この日付を「2018年3月8日」と考えると、世界のさまざまな地域で次のように解釈されます。

  • 英国スタイルでは、「2018年3月8日」と解釈されます。
  • ヨーロッパスタイルでは、「2018年8月3日」と解釈されます。

幸いにも、ISOが開発した国際日付形式には1つの選択肢があります。グローバル標準ISO 8601形式「YYYY-MM-DDThh:mm:ss」は、文字列リテラルの言語に依存しないオプションであり、これらすべての問題に対処します。「yyyy」は年、「mm」は月、「dd」は日です。したがって、国際ISO形式の日付「2018年3月8日」は「2018-03-08」と表記されます。したがって、ISO形式は日付表現に最適です。

@date_time_value varchar(100)= '2019-03-28 21:02:04'を宣言しますselect convert(datetime2、@ date_time_value、126)as [yyyy-mm-ddThh:mi:ss.mmm]

推奨事項:

うまくいけば、この記事は、日付/時刻の値についてコミュニティで頻繁に見た混乱を和らげるのに役立ちます。ただし、日付をテキストタイプ(varchar、char、nvarchar、nchar、またはtext)で保存しないでください。日付値は常にDATE、DATETIME、できればDATETIME2(より精度の高い)タイプの列に保存し、日付情報のフォーマットはそのままにしてください。データベースから取得するのではなく、ユーザーインターフェイスレイヤーに。