Oracle: Получить по TZNAME Возможно ли это? - PullRequest
0 голосов
/ 19 октября 2011

Как мы можем узнать, под каким TZNAME мы находимся в нашей базе данных? и под TZNAME я имею в виду что-то вроде (из списка)

select * from V$TIMEZONE_NAMES;

Если мы сделаем

select dbtimezone from dual

Я получаю dbtimezone = -04: 00

мы получаем DBTIMEZONE, который является числовым представлением часового пояса, но поскольку их много, но в разных местах, мы не сможем быть на 100% точными. Например, в настоящее время у нас есть -04: 00, которые могут быть как EST CANADA, так и EST NY (или датой, не требующей перехода на летнее время)

Есть ли способ получить фактическое TZNAME часового пояса базы данных, а не фактическое время?

Спасибо

1 Ответ

2 голосов
/ 19 октября 2011

Мы можем извлечь TIMEZONE_REGION из отметки времени, предоставив ее TIMESTAMP WITH TIMEZONE. Вот так:

SQL> select extract(timezone_region from current_timestamp)
  2  from dual
  3  /

EXTRACT(TIMEZONE_REGIONFROMCURRENT_TIMESTAMP)
----------------------------------------------------------------
CET

SQL>  alter session set time_zone='UTC';

Session altered.

SQL> select extract(timezone_region from current_timestamp)
  2  from dual
  3  /

EXTRACT(TIMEZONE_REGIONFROMCURRENT_TIMESTAMP)
----------------------------------------------------------------
UTC

SQL> alter session set time_zone='-04:00';

Session altered.

SQL> select extract(timezone_region from current_timestamp)
  2  from dual
  3  /

EXTRACT(TIMEZONE_REGIONFROMCURRENT_TIMESTAMP)
----------------------------------------------------------------
UNKNOWN

SQL> 

Последний результат возвращает UNKNOWN, поскольку более одного имени часового пояса отображается со смещением минус четыре часа. Существуют различные способы установки имени часового пояса на уровне сеанса; один из них, вероятно, будет лучшим способом обойти эту проблему. Узнать больше .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...