sql >> Databasteknik >  >> RDS >> Oracle

Oracle SQL frågesats och villkor med tidsstämplar och ISO-datum

Baserat på en tidigare fråga , det är frestande att behandla både T och Z som bokstavliga tecken och i princip ignorera dem med:

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

Om du använder to_timestamp_tz() Utan att ange en tidszon används den som standard till din sessionstidszon, liksom to_timestamp(); så en tid som anges i Zulu/UTC förlorar denna zoninformation:

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 visas som 12:00 i New York, inte 12:00 UTC.

En säkrare konvertering, förutsatt att dina värden alltid ska representera UTC, är att ange tidszonen uttryckligen 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')

Detta 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. När det är akut

  2. Hur lagrar man ett stort antal poster i MySql-databasen?

  3. Radstorleken är för stor fel i mysql skapa tabellfråga

  4. PostgreSQL CROSS JOIN-indexering för prestanda