Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да събера часовата зона на операционната система от базата данни на Oracle във формат на низ? (Мигриране/преобразуване на дата в ts с tz)

Ако данните вече са в таблица на Oracle SQL и трябва да конвертирате в клеймо за време с часова зона (например в нова колона, която сте създали в същата таблица), не е необходимо да отивате изрично в операционната система или използвайте Java или друго нещо, различно от самата база данни на Oracle.

От въпроса ви не става ясно дали трябва да приемете, че „датата“ е трябвало да бъде в часовата зона на сървъра (споменавате „базата данни“, което обикновено означава сървъра) или часовата зона на клиента (споменавате „сесия“, което означава клиентът). Така или иначе:

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

или използвайте sessiontimezone като втори аргумент, ако това е, което ви трябва.

Това предполага, че часовата зона на базата данни (и/или сесията) е настроена правилно в db, съответно в клиента. Ако не е / не са, това първо трябва да се поправи. Oracle е напълно способен да се справи с лятното часово време, ако параметрите са зададени правилно на първо място. (И ако не са, не е ясно защо бихте се опитвали да накарате операцията си да бъде „по-правилна“, отколкото базата данни поддържа на първо място.)

Пример:в клаузата WITH по-долу симулирам таблица с колона dt в тип данни date . След това преобразувам това в timestamp with time zone , в часовата зона на моята сесия (клиент).

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Не може да използва LISTAGG

  2. Грешка на Oracle ORA-06512

  3. Какво е значението на символа „@“ в Oracle SQL?

  4. PL/SQL пренаписва конкатенирана заявка с клауза „IN“.

  5. Как да получите името на деня от дата в Oracle