2013-04-17 127 views
0

在進行比較之前是否需要將TIMESTAMP轉換爲DATE? EX:在Oracle中比較日期時間

AND SORD.CREATED >= TO_DATE(FROM_TZ(CAST(TO_DATE('','DD-MON-YYYY HH24:MI:SS') AS TIMESTAMP), 'Asia/Kuala_Lumpur') AT TIME ZONE 'UTC','DD-MON-YYYY HH24:MI:SS') 
AND SORD.CREATED < TO_DATE(FROM_TZ(CAST(TO_DATE('','DD-MON-YYYY HH24:MI:SS') AS TIMESTAMP), 'Asia/Kuala_Lumpur') AT TIME ZONE 'UTC','DD-MON-YYYY HH24:MI:SS') 

只是尋找一個意見,因爲我還是一個新手,學習數據庫。

+3

你在使用什麼數據庫? –

+0

@MarcoForberg TO_DATE()是一個oracle或db2函數,但它看起來像from_tz()只是oracle。現在適當標記。 –

+0

@MarcoForberg 我使用SQL Developer與oracle db –

回答

1

很難準確地分辨出您使用的數據庫。從你提供的代碼中的函數中,我猜測Oracle?請確認。

一般情況下,我可以告訴你以下幾點:

  • 您沒有傳遞任何值。 TO_DATE的第一個參數爲空,並且包含要轉換爲日期的字符串。

  • 您需要知道數據庫中的值是什麼。是SORD.CREATED a DATETIMESTAMP數據類型?它保持UTC值嗎?如果是這樣,那麼是的,你應該在查詢之前將本地時間轉換爲UTC。如果可能的話,你應該在查詢本身之外執行此操作。

  • 如果數據庫中的值是TIMESTAMP WITH TIME ZONE型的,那麼你可以使用一個DATETIMESTAMPAT TIME ZONE功能,就像你在你的問題顯示。

  • 不要不必要地將字符串轉換爲字符串。如果您的源數據已經在DATETIMESTAMP數據類型中,則不需要轉換爲字符串。一旦日期是一個日期,你應該保留一個日期。介紹字符串格式有時會引入錯誤。

+0

是的。我使用oracle數據庫。我知道輸入是空的。我使用這部分代碼來生成一段時間的報告。我知道數據庫正在使用UTC,但不確定數據類型是時間戳還是日期時間。有沒有辦法確認數據類型? 我想知道我們是否可以比較沒有發生錯誤/偏移的時間戳和日期時間。 –

+0

只有你會知道你正在存儲什麼。如果它不是數據庫,請查看錶定義,並檢查一些值。或者與任何數據庫所屬的人交談。 –