Als de gegevens al in een Oracle SQL-tabel staan en u moet converteren naar een tijdstempel met tijdzone (bijvoorbeeld in een nieuwe kolom die u in dezelfde tabel hebt gemaakt), hoeft u niet expliciet naar het besturingssysteem te gaan of naar gebruik Java of iets anders dan de Oracle-database zelf.
Uit uw vraag wordt niet duidelijk of u ervan uit moet gaan dat de "datum" bedoeld was in de tijdzone van de server (u noemt "de database", wat normaal gesproken de server betekent) of de tijdzone van de client (u vermeldt "sessie" wat betekent de cliënt). Hoe dan ook:
update <your_table>
set <timestamp_with_time_zone_col> =
from_tz(cast<date_col> as timestamp, dbtimezone)
;
of gebruik sessiontimezone
als tweede argument, als dat is wat je nodig hebt.
Dit veronderstelt dat de tijdzone van de database (en/of de sessie) correct is ingesteld in de db, respectievelijk in de client. Als dat niet het geval is/zijn, moet dat eerst worden opgelost. Oracle is prima in staat om met dagbesparing om te gaan, als de parameters in de eerste plaats correct zijn ingesteld. (En als dat niet het geval is, is het niet duidelijk waarom u zou proberen om uw bewerking "juist" te maken dan de database in de eerste plaats ondersteunt.)
Voorbeeld:in de WITH-clausule hieronder simuleer ik een tabel met een kolom dt
in gegevenstype date
. Dan converteer ik dat naar een timestamp with time zone
, in de (klant) tijdzone van mijn sessie.
with
my_table ( dt ) as (
select to_date('2018-06-20 14:30:00', 'yyyy-mm-dd hh24:mi:ss') from dual
)
select dt,
from_tz(cast(dt as timestamp), sessiontimezone) as ts_with_tz
from my_table
;
DT TS_WITH_TZ
------------------- -------------------------------------------------
2018-06-20 14:30:00 2018-06-20 14:30:00.000000000 AMERICA/LOS_ANGELES