sql >> Databasteknik >  >> RDS >> Sqlserver

Konvertera ett ISO-formaterat datum till DATETIME

Problemet är att din sträng är inte ett accepterat SQL Server datetime-format. SQL Server känner igen ISO8601 format, vilket är:

yyyy-mm-ddThh:mi:ss.mmm

Vilket skulle vara 2013-03-02T16:48:00 för ditt datum ovan.

Se Datum- och tidsformat avsnitt.

Så följande sats misslyckas:

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

select convertedDate = cast(@date as datetime)

Om du konverterar strängen till ISO8601 format, kommer uttalandet att fungera:

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

select convertedDate = cast(@date as datetime)

SQL-fiol med demo .

Du kan uppdatera ditt format till en SQL Server som känner igen och casta strängen till en datetime i en sats:

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

Detta är bara ett exempel, du kan konvertera det till vilket format som helst som känns igen av SQL Server, men detta konverterar det till ISO8601 . Konvertera i princip till ett annat format för att låta konverteringen fungera.




  1. mysql-fråga med Yii-frågebyggaren

  2. Hur många frågor är för många?

  3. Gruppera efter användare och visa senaste i MYSQL fungerar inte

  4. hur hanterar postgres bitdatatypen?