2016-09-23 1 views
0

Я новый пользователь SQL Developer и не очень много работал с меняющимися датами. У меня есть запрос, который показывает информацию за 1 час до фактического времени. Это потому, что одна из таблиц, в которых данные вытягиваются из имеет дату всегда в CST в то время как другие таблицы считают системную дату, которая имеет CDT или CST зависит от времени годаДневное время в SQL

Когда я присоединиться к таблицам, они начинаются через 1 час после фактического времени. Чтобы компенсировать это, я должен использовать DELIVERY_TIME+1/24 вместо DELIVERY_TIME, но коды нужно менять два раза в год.

Есть ли решение для этого?

+4

хранить все в utc и выполнять все сравнения/вычисления с помощью utc. то вы конвертируете в «местный» TZ только для показа. –

ответ

1

Вы хотите хранить все свои значения базы данных в виде UTC по мере возможности, поскольку они являются универсальными, как вы собираетесь получить. Вы можете отображать их как локальные моменты в вашем прикладном уровне, поскольку эти параметры часто очень специфичны для отдельного просмотра данных.

Если у вас есть конкретный срок поставки каждый день, например, 6 вечера, и вы хотите знать, где это время попадает в UTC, вы можете построить время и преобразовать его в UTC. Большинство часовых поясов, которые наблюдают какую-то форму DST-флопа назад и вперед 1h по местному времени, но не в UTC.

Обычно в вашей базе данных есть функции, такие как MAKEDATE() или MAKETIME(), которые могут строить произвольные моменты времени. Используйте их, чтобы выделить время в выбранном вами часовом поясе, затем переключитесь на UTC, чтобы они «фиксировались».

Каждый раз, когда у вас есть код, который «должен быть изменен два раза в год», у вас будет код, который не будет изменить, а затем произойдет хаос. Не делай этого. Вы просто настраиваете себя на неудачу.

Как замечание, все это в SQL может быть очень грязным, поскольку базы данных не всегда имеют актуальную информацию о часовом поясе, если они не сильно зависят от операционной системы. Ваша операционная система, как правило, лучше оборудована, она должна быть исправлена, если все изменилось, как it did in 2005. Даже это был полный беспорядок, потому что смесь исправленных и непересекающихся систем находилась в постоянном конфликте.

+0

Даже если я конвертирую в UTC, CST в UTC будет иметь другое значение, а CDT - UTC. И в итоге это будет одно и то же. Есть ли способ реализовать корректировку дневного света в SQL, когда таблица имеет время только в CST? –

+0

В идеале вы избавляетесь от времени CST и конвертируете их в UTC, чтобы они могли быть отображены в CDT или CST или CST/CDT, если необходимо. Существует много способов выражения этих значений времени. UTC - это единственный способ гарантировать, что они не прыгают взад и вперед в зависимости от времени года. – tadman