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

4 начина за промяна на часовата зона в Oracle

В Oracle Database часовите зони могат да се задават на различни места. По-долу са изброени четири начина за промяна на часовата зона, когато използвате Oracle.

Задайте часовата зона на базата данни

Можете да зададете часовата зона на базата данни, когато създавате базата данни. За да направите това, използвайте SET TIME_ZONE клауза на CREATE DATABASE изявление.

Пример:

CREATE DATABASE mySampleDb
...
SET TIME_ZONE='Australia/Sydney';

В този случай използвах име на региона на часовата зона. Вижте как да върнете списък с валидни часови зони в Oracle Database, за да получите пълен списък с валидни имена на региони във вашата система.

Като алтернатива можете да използвате действително изместване на часовата зона:

CREATE DATABASE mySampleDb
...
SET TIME_ZONE='+10:00';

Ако не зададете изрично часовата зона при създаването на базата данни, тогава тя по подразбиране е часовата зона на операционната система на сървъра.

Можете също да промените текущата настройка на часовата зона за базата данни. За да направите това, използвайте ALTER DATABASE изявление.

Пример:

ALTER DATABASE mySampleDb
...
SET TIME_ZONE='Australia/Sydney';

Имайте предвид, че часовата зона на базата данни е от значение само за TIMESTAMP WITH LOCAL TIME ZONE колони. Освен това Oracle препоръчва да зададете часовата зона на базата данни на UTC (0:00), за да избегнете преобразуването на данни и да подобрите производителността, когато данните се прехвърлят между бази данни.

Задайте часовата зона на сесията

Можете да зададете часовата зона на сесията независимо от часовата зона на базата данни. Когато върнете TIMESTAMP WITH LOCAL TIME ZONE данни, те се връщат в часовата зона на текущата сесия.

Часовата зона на сесията също влиза в сила, когато TIMESTAMP стойността се преобразува в TIMESTAMP WITH TIME ZONE или TIMESTAMP WITH LOCAL TIME ZONE тип данни.

Можете да направите няколко неща, за да зададете часовата зона на ниво сесия.

Tтой ORA_SDTZ Променлива на средата

Можете да зададете часовата зона на сесията с ORA_SDTZ променлива на средата. Това може да бъде зададено на следните стойности:

  • Локална часова зона на операционната система ('OS_TZ'). )
  • Часова зона на базата данни ('DB_TZ'). )
  • Абсолютно изместване спрямо UTC (напр.'-04:00' )
  • Име на региона на часовата зона (напр. 'America/St_Kitts' )

Ето няколко примера за настройка на тази променлива на средата в UNIX среда:

% setenv ORA_SDTZ 'OS_TZ'
% setenv ORA_SDTZ 'DB_TZ'
% setenv ORA_SDTZ 'America/St_Kitts'
% setenv ORA_SDTZ '-04:00'

Стойността по подразбиране на ORA_SDTZ променливата е 'OD_TZ' . Тази стойност се използва, когато променливата не е зададена или е зададена на невалидна стойност.

ALTER SESSION Изявление

Можете да промените часовата зона за конкретна SQL сесия с SET TIME_ZONE клауза на ALTER SESSION изявление.

TIME_ZONE могат да бъдат зададени на следните стойности:

  • Местна часова зона по подразбиране при стартиране на сесията (local )
  • Часова зона на базата данни (dbtimezone )
  • Абсолютно изместване спрямо UTC (напр. '-04:00' )
  • Име на региона на часовата зона (напр. 'Canada/Eastern' )

Ето пример за настройка на TIME_ZONE до такива стойности:

ALTER SESSION SET TIME_ZONE=local;
ALTER SESSION SET TIME_ZONE=dbtimezone;
ALTER SESSION SET TIME_ZONE='Canada/Eastern';
ALTER SESSION SET TIME_ZONE='-04:00';

Можете да проверите часовата зона на текущата си сесия с SESSIONTIMEZONE функция.

Пример:

SELECT SESSIONTIMEZONE FROM DUAL;

Резултат:

Australia/Brisbane 

В моя случай часовата зона на сесията е настроена на Австралия/Брисбейн.

AT TIME ZONE Клауза

Изразът за дата и час може да включва AT LOCAL клауза или AT TIME ZONE клауза. Ако включите AT LOCAL клауза, тогава резултатът се връща в часова зона на текущата сесия. Ако включите AT TIME ZONE клауза, тогава часовата зона може да бъде една от следните:

  • Изместване на часовата зона
  • Име на региона на часовата зона
  • DBTIMEZONE (тази функция връща часовата зона на базата данни)
  • SESSIONTIMEZONE (тази функция връща часовата зона на текущата сесия)
  • Израз, който връща символен низ с валиден формат на часовата зона.

Пример:

SELECT 
    FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') 
    AT TIME ZONE '+12:00'
FROM DUAL;

Резултат:

02/JAN/30 04:30:35.000000000 AM +12:00

В този случай използвах FROM_TZ() функция за преобразуване на стойност на времеви печат и часова зона в TIMESTAMP WITH TIME ZONE стойност. След това използвах AT TIME ZONE клауза, за да посочите различна часова зона.

Ето същия пример, освен че този път указвам AT LOCAL :

SELECT 
    FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') 
    AT LOCAL
FROM DUAL;

Резултат:

02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. създайте таблица с последователност.nextval в oracle

  2. Неявна разлика в преобразуването на потока от данни CAST спрямо ssis

  3. Отрязване на таблица в съхранена процедура

  4. Spool команда:Не извеждайте SQL израз във файл

  5. Фонови процеси