Il problema è che la tua stringa non un formato di data e ora accettato di SQL Server. SQL Server riconosce ISO8601 formato, che è:
yyyy-mm-ddThh:mi:ss.mmm
Quale sarebbe il 2013-03-02T16:48:00 per la tua data sopra.
Vedi Stili di data e ora sezione.
Quindi la seguente affermazione fallirà:
declare @date nvarchar(max) = '20130302T164800'
select convertedDate = cast(@date as datetime)
Se converti la stringa in ISO8601 formato, la dichiarazione funzionerà:
declare @date nvarchar(max) = '2013-03-02T16:48:00'
select convertedDate = cast(@date as datetime)
Puoi aggiornare il tuo formato a un SQL Server riconosciuto e trasmettere la stringa a un datetime in un'unica istruzione:
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)
Questo è solo un esempio, puoi convertirlo in qualsiasi formato riconosciuto da SQL Server, ma questo lo converte in ISO8601 . Fondamentalmente, convertilo in un formato diverso per consentire alla conversione di funzionare.