2

SQL Server Management Studio を使用して SQL クエリを作成していますが、ISO 日付形式の NVARCHAR 型の値がいくつかあります (例: 20130302T164800)。それらをDATETIMEに変換する必要があります

関数を試しましたConvert()が、例外が発生します:

nvarchar データ型から datetime データ型への変換により、範囲外の値が発生しました

これを行う方法はありますか?

4

1 に答える 1

6

問題は、文字列が受け入れられた SQL Server の日時形式ではないことです。SQL Server は、次のISO8601形式を認識します。

yyyy-mm-ddThh:mi:ss.mmm

上記の日付では、2013-03-02T16 :48:00になります。

日付と時刻のスタイルのセクションを参照してください。

したがって、次のステートメントは失敗します。

declare @date nvarchar(max) = '20130302T164800'

select convertedDate = cast(@date as datetime)

文字列をISO8601形式に変換すると、次のステートメントが機能します。

declare @date nvarchar(max) = '2013-03-02T16:48:00'

select convertedDate = cast(@date as datetime)

demo を使用した SQL Fiddle

SQL Server が認識する形式に更新し、1 つのステートメントで文字列を datetime にキャストできます。

declare @date nvarchar(max) = '20130302T164800'

select cast(left(@date, 4)
  + '-' + substring(@date,5,2)
  + '-' + substring(@date,7,5)
  + ':' + substring(@date,12,2)
  + ':' + substring(@date,14,2) as datetime)

demo を使用した SQL Fiddle

これは単なる例です。SQL Server で認識される任意の形式に変換できますが、これはISO8601に変換されます。基本的に、変換が機能するように別の形式に変換します。

于 2013-03-29T11:04:29.213 に答える