Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Converter uma data formatada ISO para DATETIME


O problema é que sua string não um formato de data e hora do SQL Server aceito. O SQL Server reconhece o ISO8601 formato, que é:
yyyy-mm-ddThh:mi:ss.mmm

Qual seria 2013-03-02T16:48:00 para sua data acima.

Consulte Estilos de data e hora seção.

Portanto, a seguinte declaração falhará:
declare @date nvarchar(max) = '20130302T164800'

select convertedDate = cast(@date as datetime)

Se você converter a string para o ISO8601 formato, a instrução funcionará:
declare @date nvarchar(max) = '2013-03-02T16:48:00'

select convertedDate = cast(@date as datetime)

SQL Fiddle com demonstração .

Você pode atualizar seu formato para um reconhecimento do SQL Server e converter a string para uma data e hora em uma instrução:
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 com demonstração .

Este é apenas um exemplo, você pode convertê-lo para qualquer formato reconhecido pelo SQL Server, mas isso o converte para ISO8601 . Basicamente, converta-o para um formato diferente para permitir que a conversão funcione.