sql >> Base de Datos >  >> RDS >> Sqlserver

Convierta una fecha con formato ISO a DATETIME

El problema es que su cadena no un formato de fecha y hora de SQL Server aceptado. SQL Server reconoce el ISO8601 formato, que es:

yyyy-mm-ddThh:mi:ss.mmm

Que sería 2013-03-02T16:48:00 para su fecha anterior.

Consulte Estilos de fecha y hora sección.

Entonces la siguiente declaración fallará:

declare @date nvarchar(max) = '20130302T164800'

select convertedDate = cast(@date as datetime)

Si convierte la cadena a ISO8601 formato, la declaración funcionará:

declare @date nvarchar(max) = '2013-03-02T16:48:00'

select convertedDate = cast(@date as datetime)

SQL Fiddle con demostración .

Puede actualizar su formato a uno que SQL Server reconozca y convertir la cadena a una fecha y hora en una declaración:

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 demostración .

Este es solo un ejemplo, podría convertirlo a cualquier formato reconocido por SQL Server, pero esto lo convierte a ISO8601 . Básicamente, conviértalo a un formato diferente para permitir que la conversión funcione.