sql >> Databasteknik >  >> RDS >> Oracle

Hur samlar man in tidszon för operativsystem från Oracle-databas i strängformat? (Migrera/konvertera datum till ts med tz)

Om data redan finns i en Oracle SQL-tabell och du måste konvertera till en tidsstämpel med tidszon (till exempel i en ny kolumn som du skapade i samma tabell), behöver du inte explicit gå till operativsystemet, eller till använd Java eller något annat, annat än själva Oracle-databasen.

Det framgår inte av din fråga om du måste anta att "datumet" var tänkt att vara i serverns tidszon (du nämner "databasen" som normalt betyder servern) eller klientens tidszon (du nämner "session" vilket betyder Klienten). Hur som helst:

update <your_table>
set <timestamp_with_time_zone_col> = 
            from_tz(cast<date_col> as timestamp, dbtimezone)
;

eller använd sessiontimezone som det andra argumentet, om det är vad du behöver.

Detta förutsätter att databasens (och/eller sessionens) tidszon är korrekt inställd i db, respektive i klienten. Om det inte är / de inte är det måste det åtgärdas först. Oracle är perfekt kapabelt att hantera dagspartid, om parametrarna är korrekt inställda i första hand. (Och om de inte är det, är det inte klart varför du skulle försöka få din operation att bli "mer korrekt" än vad databasen stöder i första hand.)

Exempel:i WITH-satsen nedan simulerar jag en tabell med kolumnen dt i datatypen date . Sedan konverterar jag det till en timestamp with time zone , i min sessions (klient) tidszon.

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. MySQL LEFT JOIN duplicerar resultaten

  2. KONTROLLERA begränsning på födelsedatum?

  3. Datatyp/struktur för att lagra tidszonförskjutning i MySQL

  4. Hur man tar bort ett SQL Server Agent-jobb i Azure Data Studio