sql >> Databáze >  >> RDS >> Oracle

Příkaz a podmínky dotazu Oracle SQL s časovými razítky a daty ISO

Na základě dřívějšího dotazu , je lákavé považovat T i Z za znakové literály a v podstatě je ignorovat pomocí:

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

Pokud použijete to_timestamp_tz() bez určení časového pásma se jako výchozí použije časové pásmo vaší relace, stejně jako to_timestamp(); takže čas zadaný v Zulu/UTC ztratí informace o zóně:

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                       

Váš čas ve 12:00 se zobrazuje jako 12:00 v New Yorku, nikoli 12:00 UTC.

Bezpečnější převod, za předpokladu, že vaše hodnoty mají vždy představovat UTC, je explicitně specifikovat časové pásmo pomocí from_tz() funkce :

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

Tím se správně získá čas UTC:

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. nebyl nalezen žádný fond připojení s primárním

  2. Rozdíl mezi LIKE a ~ v Postgresu

  3. Jak přinutit PHP, aby četl nové řádky a vrátil se jako

  4. Vytvoření vysoce dostupné databáze pro Moodle pomocí replikace MySQL