Problemet er, at din streng ikke er et accepteret SQL Server datetime-format. SQL Server genkender ISO8601 format, som er:
yyyy-mm-ddThh:mi:ss.mmm
Hvilket ville være 2013-03-02T16:48:00 til din date ovenfor.
Se Dato- og tidstypografier afsnit.
Så følgende sætning vil mislykkes:
declare @date nvarchar(max) = '20130302T164800'
select convertedDate = cast(@date as datetime)
Hvis du konverterer strengen til ISO8601 format, vil erklæringen virke:
declare @date nvarchar(max) = '2013-03-02T16:48:00'
select convertedDate = cast(@date as datetime)
Du kan opdatere dit format til én SQL Server, der genkender og cast strengen til en dato og klokkeslæt i én sætning:
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)
Dette er blot et eksempel, du kan konvertere det til ethvert format, der genkendes af SQL Server, men dette konverterer det til ISO8601 . Grundlæggende skal du konvertere det til et andet format for at lade konverteringen fungere.