Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Wyrażenie i warunki zapytania Oracle SQL ze znacznikami czasu i datami ISO

Na podstawie wcześniejszego pytania , kuszące jest traktowanie zarówno T, jak i Z jako literałów znakowych i w zasadzie ignorowanie ich za pomocą:

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

Jeśli używasz to_timestamp_tz() bez określenia strefy czasowej, domyślnie jest to strefa czasowa sesji, podobnie jak to_timestamp(); więc czas określony w Zulu/UTC traci informacje o strefie:

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                       

Twoja godzina 12:00 jest wyświetlana jako 12:00 w Nowym Jorku, a nie 12:00 UTC.

Bezpieczniejszą konwersją, zakładając, że wartości zawsze mają reprezentować UTC, jest wyraźne określenie strefy czasowej za pomocą from_tz() funkcja :

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

Dzięki temu czas UTC jest poprawnie odczytywany:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zakleszczenia w Oracle

  2. Dlaczego hibernacja generuje przedrostek „T_” tableName podczas operacji wstawiania i usuwania?

  3. Jak zainstalować klienta SQL * PLUS w systemie Linux?

  4. Dodano datę i datę modyfikacji dla audytu tabeli Oracle

  5. ORACLE Rzucanie DATY na ZNACZNIK CZASOWY ZE STREFĄ CZASOWĄ Z PRZESUNIĘCIEM