Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Convertir une date au format ISO en DATETIME

Le problème est que votre chaîne n'est pas un format datetime accepté de SQL Server. SQL Server reconnaît la norme ISO8601 format, qui est :

yyyy-mm-ddThh:mi:ss.mmm

Qui serait 2013-03-02T16:48:00 pour votre date ci-dessus.

Voir Styles de date et d'heure rubrique.

Ainsi, l'instruction suivante échouera :

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

select convertedDate = cast(@date as datetime)

Si vous convertissez la chaîne en ISO8601 format, l'instruction fonctionnera :

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

select convertedDate = cast(@date as datetime)

SQL Fiddle avec démo .

Vous pouvez mettre à jour votre format vers un SQL Server reconnu et convertir la chaîne en une date/heure dans une seule instruction :

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 avec démo .

Ceci n'est qu'un exemple, vous pouvez le convertir dans n'importe quel format reconnu par SQL Server, mais cela le convertit en ISO8601 . Fondamentalement, convertissez-le dans un format différent pour permettre à la conversion de fonctionner.