sql >> Database >  >> RDS >> Oracle

Hoe de tijdzone van het besturingssysteem te verzamelen uit de Oracle-database in tekenreeksformaat? (Migreer / converteer datum naar ts met tz)

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


  1. Maak een database-e-mailaccount in SQL Server (T-SQL)

  2. Samengestelde PRIMARY KEY dwingt NOT NULL-beperkingen af ​​op betrokken kolommen

  3. SQLite-JSON()

  4. De beste manier om te zien dat 3 of meer opeenvolgende records ontbreken