sql >> Database teknologi >  >> RDS >> Oracle

Oracle SQL-forespørgselssætning og betingelser med tidsstempler og ISO-datoer

Baseret på et tidligere spørgsmål , er det fristende at behandle både T og Z som bogstavelige tegn og dybest set ignorere dem ved at bruge:

to_timestamp_tz('2014-01-28T12:00:0Z', 'YYYY-MM-DD"T"HH24:MI:SS"Z"')

Hvis du bruger to_timestamp_tz() uden at angive en tidszone, vil den som standard være din sessions tidszone, ligesom to_timestamp(); så et tidspunkt angivet i Zulu/UTC mister denne zoneinformation:

alter session set time_zone = 'America/New_York';
select to_timestamp_tz('2014-01-28T12:00:0Z',
  'YYYY-MM-DD"T"HH24:MI:SS"Z"') from dual;

TO_TIMESTAMP_TZ('2014-01-28T12:00:0Z','YYYY-MM-DD"T"HH24:MI:SS"Z"')
-------------------------------------------------------------------
28-JAN-14 12.00.00.000000000 AMERICA/NEW_YORK                       

Din 12:00-tid vises som 12:00 i New York, ikke 12:00 UTC.

En mere sikker konvertering, forudsat at dine værdier altid skal repræsentere UTC, er at specificere tidszonen eksplicit med den from_tz() funktion :

WHERE MODIFICATION_DATE >= from_tz(to_timestamp('2014-01-28T12:00:0Z',
  'YYYY-MM-DD"T"HH24:MI:SS"Z"'), 'UTC')

Dette får UTC-tiden korrekt:

alter session set time_zone = 'America/New_York';
select from_tz(to_timestamp('2014-01-28T12:00:0Z',
  'YYYY-MM-DD"T"HH24:MI:SS"Z"'), 'UTC') from dual;

FROM_TZ(TO_TIMESTAMP('2014-01-28T12:00:0Z','YYYY-MM-DD"T"HH24:MI:SS"Z"'),'UTC')
-------------------------------------------------------------------------------
28-JAN-14 12.00.00.000000000 UTC                                                


  1. Grupper for måned inklusive tomme måneder

  2. JPA OneToMany/ManyToOne-forholdet virker ikke - Hvad mangler jeg?

  3. Gem billeder i filsystemet og brug mysql til at indeksere

  4. Sådan bruger du Case Statement til betinget formatering i Select Query - SQL Server / TSQL Tutorial Del 116