Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Converti una data formattata ISO in DATETIME

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)

SQL Fiddle con demo .

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)

SQL Fiddle con demo .

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.