sql >> Database >  >> RDS >> Oracle

Oracle SQL-queryverklaring en voorwaarden met tijdstempels en ISO-datums

Gebaseerd op een eerdere vraag , is het verleidelijk om zowel de T als de Z als letterlijke tekens te behandelen en ze in feite te negeren, met behulp van:

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

Als u to_timestamp_tz() . gebruikt zonder een tijdzone op te geven, wordt standaard de tijdzone van uw sessie gebruikt, net als to_timestamp(); dus een tijd gespecificeerd in Zulu/UTC verliest die zone-informatie:

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                       

Uw tijd van 12.00 uur wordt weergegeven als 12.00 uur in New York, niet als 12.00 uur UTC.

Een veiligere conversie, ervan uitgaande dat uw waarden altijd UTC moeten vertegenwoordigen, is om de tijdzone expliciet op te geven met de from_tz() functie :

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

Dit krijgt de UTC-tijd correct:

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. GROUP BY in Postgres - geen gelijkheid voor JSON-gegevenstype?

  2. Hoe te repareren Ora-01427 single-rij subquery retourneert meer dan één rij in select?

  3. FOUT:niet-beëindigde tekenreeks tussen aanhalingstekens op of nabij

  4. Tabel converteren van MyISAM naar INNODB