Das Problem ist, dass Ihr String nicht ist ein akzeptiertes Datetime-Format von SQL Server. SQL Server erkennt die ISO8601 Format, das ist:
yyyy-mm-ddThh:mi:ss.mmm
Das wäre 2013-03-02T16:48:00 für Ihr Datum oben.
Siehe Formate für Datum und Uhrzeit Abschnitt.
Die folgende Anweisung wird also fehlschlagen:
declare @date nvarchar(max) = '20130302T164800'
select convertedDate = cast(@date as datetime)
Wenn Sie die Zeichenfolge in ISO8601 konvertieren formatieren, funktioniert die Anweisung:
declare @date nvarchar(max) = '2013-03-02T16:48:00'
select convertedDate = cast(@date as datetime)
Sie können Ihr Format auf ein Format aktualisieren, das von SQL Server erkannt wird, und die Zeichenfolge in einer Anweisung in eine Datumszeit umwandeln:
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)
Dies ist nur ein Beispiel, Sie könnten es in jedes von SQL Server erkannte Format konvertieren, aber dies konvertiert es in ISO8601 . Konvertieren Sie es grundsätzlich in ein anderes Format, damit die Konvertierung funktioniert.