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

Konverter en ISO-formateret dato til DATETIME

Problemet er, at din streng ikke er et accepteret SQL Server datetime-format. SQL Server genkender ISO8601 format, som er:

yyyy-mm-ddThh:mi:ss.mmm

Hvilket ville være 2013-03-02T16:48:00 til din date ovenfor.

Se Dato- og tidstypografier afsnit.

Så følgende sætning vil mislykkes:

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

select convertedDate = cast(@date as datetime)

Hvis du konverterer strengen til ISO8601 format, vil erklæringen virke:

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

select convertedDate = cast(@date as datetime)

SQL Fiddle med demo .

Du kan opdatere dit format til én SQL Server, der genkender og cast strengen til en dato og klokkeslæt i én sætning:

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 med demo .

Dette er blot et eksempel, du kan konvertere det til ethvert format, der genkendes af SQL Server, men dette konverterer det til ISO8601 . Grundlæggende skal du konvertere det til et andet format for at lade konverteringen fungere.




  1. Sådan får du størrelsen på klatten i PHP eller SQL

  2. postgresql COUNT(DISTINCT ...) meget langsom

  3. Brug af Oracle-database med CakePHP 2.0

  4. Forhindre indsættelsesudløser