Problemet är att din sträng är inte ett accepterat SQL Server datetime-format. SQL Server känner igen ISO8601 format, vilket är:
yyyy-mm-ddThh:mi:ss.mmm
Vilket skulle vara 2013-03-02T16:48:00 för ditt datum ovan.
Se Datum- och tidsformat avsnitt.
Så följande sats misslyckas:
declare @date nvarchar(max) = '20130302T164800'
select convertedDate = cast(@date as datetime)
Om du konverterar strängen till ISO8601 format, kommer uttalandet att fungera:
declare @date nvarchar(max) = '2013-03-02T16:48:00'
select convertedDate = cast(@date as datetime)
Du kan uppdatera ditt format till en SQL Server som känner igen och casta strängen till en datetime i en sats:
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)
Detta är bara ett exempel, du kan konvertera det till vilket format som helst som känns igen av SQL Server, men detta konverterar det till ISO8601 . Konvertera i princip till ett annat format för att låta konverteringen fungera.