2016-09-23 65 views
0

我是新的SQL Developer用戶,在更改日期方面沒有太多工作。我有一個查詢,顯示實際時間1小時後的信息。這是因爲在數據從拉表中的一個具有日期總是CST而其他表,不妨考慮CDT系統日期CST取決於一年的時間SQL中的夏時制

當我加入表格,他們從實際時間開始1小時。爲了彌補這一點,我必須使用DELIVERY_TIME+1/24而不是DELIVERY_TIME,但代碼需要每年更換兩次。

有沒有解決方案?

+4

將所有內容存儲在utc中,並使用utc進行所有比較/計算。那麼你只能將其轉換爲「本地」TZ。 –

回答

1

You'l希望所有的數據庫值儘可能因爲這些都是通用的,你會得到存儲爲UTC。您可以在應用程序層中將它們呈現爲當地時間,因爲這些設置通常對查看數據的個人而言非常具體。

如果你每天有一個特定的交貨時間,比如下午6時,你想知道那個時候落在UTC可以構造時間並將其轉換爲UTC。大多數時區會在當地時間內來回觀察某種形式的DST觸發1小時,但不以UTC表示。

通常在您的數據庫中可以使用像MAKEDATE()MAKETIME()這樣的函數,它可以構造任意時間點。使用這些在您的首選時區中打個時間,然後切換到UTC以保持它們「固定」。

任何時候當你有「必須每年更換兩次」的代碼時,你將會得到代碼不會被更改,然後會出現混亂。不要這樣做。你只是爲自己設置失敗。

作爲一個說明,做這一切在SQL可以很凌亂,因爲數據庫並不總是有最新的區信息,除非它們嚴重依賴於操作系統。你的操作系統一般裝備較好,如果事情改變如it did in 2005,應該得到補丁。即使是這樣,由於修補和未修補系統的混合處於不斷衝突之中,所以這是一團糟。

+0

即使我轉換爲UTC,CST到UTC將有不同的值,然後CDT到UTC。最後它會是同樣的事情。如果表中只有CST時間,是否有任何方法可以在SQL中實現日光校正? –

+0

理想情況下,您可以擺脫CST時間並將它們轉換爲UTC,以便可以根據需要將它們呈現在CDT或CST或CST/CDT中。表達這些時間值的方法很多。 UTC是確保他們不會根據一年中的時間來回跳轉的唯一方法。 – tadman