sql >> Database >  >> RDS >> Sqlserver

Converteer een ISO-geformatteerde datum naar DATETIME

Het probleem is dat je string niet . is een geaccepteerde SQL Server datetime-indeling. SQL Server herkent de ISO8601 formaat, dat is:

yyyy-mm-ddThh:mi:ss.mmm

Wat zou zijn 02-03-2013T16:48:00 voor je date hierboven.

Zie Datum- en tijdstijlen sectie.

Dus de volgende verklaring zal falen:

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

select convertedDate = cast(@date as datetime)

Als u de tekenreeks converteert naar de ISO8601 formaat, zal de verklaring werken:

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

select convertedDate = cast(@date as datetime)

SQL Fiddle met demo .

U kunt uw indeling bijwerken naar één SQL Server-herkenning en de tekenreeks casten naar een datetime in één instructie:

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

Dit is slechts een voorbeeld, u zou het kunnen converteren naar elk formaat dat door SQL Server wordt herkend, maar dit converteert het naar ISO8601 . Converteer het in principe naar een ander formaat om de conversie te laten werken.




  1. met behulp van pl/sql hoe open ik een map?

  2. postgres - twee arrays vergelijken

  3. MySQL-prestaties:DOE MEE AAN vs WAAR

  4. Hoe u de juiste gegevenstypen selecteert