2016-08-19 4 views
0

на основе this question и соответствующие ответы, которые я сделал в следующей таблице:часовых поясов и времени полей оракул 11g

enter image description here

Тогда у меня есть следующие вопросы:

  1. Что такое роль время базы данных в этом?
  2. Существует способ получения часового пояса базы данных базы данных?

ответ

2

Существует способ получения часового пояса базы данных базы данных?

Да, вы можете сделать

SELECT TO_CHAR(SYSTIMESTAMP, 'TZR') FROM dual; 
or 
SELECT EXTRACT(TIMEZONE_REGION FROM SYSTIMESTAMP) FROM dual; 

Какова роль времени базы данных в этом?

Фактически это не имеет отношения к повседневному использованию, оно используется только для столбцов данных типа TIMESTAMP WITH LOCAL TIME ZONE и определяет формат хранения.

Возьмите следующую аналогию, чтобы понять DBTIMEZONE и TIMESTAMP WITH LOCAL TIME ZONE: Всякий раз, когда вы должны работать с часовыми поясами общий подход заключается в хранении все раз в UTC и конвертировать время в прикладном уровне в соответствии с текущими настройками пользователя.

Точно так же работает TIMESTAMP WITH LOCAL TIME ZONE, но на SQL-уровне. Только разница: Oracle не хранит TIMESTAMP WITH LOCAL TIME ZONE раз, зафиксированный на UTC время, но в DBTIMEZONE время. Следовательно, вы не можете изменить DBTIMEZONE в своей базе данных, если база данных содержит таблицу с столбцом TIMESTAMP WITH LOCAL TIME ZONE, а в столбце содержатся данные.

+0

Большое спасибо! Странная часть состоит в том, что первый результат запроса «НЕИЗВЕСТНО», а второй - «-3: 00». – rlartiga

+1

Я предполагаю, что 'TZR' возвращает только значение, если вы имеете полное имя региона, например. 'Европа/Zurich'. Обычно DBTIMEZONE устанавливается как смещение UTC, а не область часового пояса, т. Е. Смещение является постоянным в течение всего года, и вы не применяете летнее время. –

+0

Хорошо спасибо, я думал то же самое. – rlartiga

Смежные вопросы