SQL Server Management Studio を使用して SQL クエリを作成していますが、ISO 日付形式の NVARCHAR 型の値がいくつかあります (例: 20130302T164800
)。それらをDATETIMEに変換する必要があります
関数を試しましたConvert()
が、例外が発生します:
nvarchar データ型から datetime データ型への変換により、範囲外の値が発生しました
これを行う方法はありますか?
SQL Server Management Studio を使用して SQL クエリを作成していますが、ISO 日付形式の NVARCHAR 型の値がいくつかあります (例: 20130302T164800
)。それらをDATETIMEに変換する必要があります
関数を試しましたConvert()
が、例外が発生します:
nvarchar データ型から datetime データ型への変換により、範囲外の値が発生しました
これを行う方法はありますか?
問題は、文字列が受け入れられた 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)
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)
これは単なる例です。SQL Server で認識される任意の形式に変換できますが、これはISO8601に変換されます。基本的に、変換が機能するように別の形式に変換します。