問題は、文字列がではないことです。 受け入れられているSQLServerの日時形式。 SQLServerは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)
1つのステートメントでフォーマットを更新して1つのSQLServerが認識し、文字列を日時にキャストできます。
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に変換されます。 。基本的に、変換が機能するように、別の形式に変換します。