2016-06-01 82 views
1

如何將時間戳轉換爲日期?在Oracle SQL中將日期轉換爲時間戳

表中有一個字段,start_ts這是timestamp格式:

'05/13/2016 4:58:11.123456 PM' 

我需要查詢表,並找出最大和最小的表timestamp,但我不能。

Select max(start_ts) 
from db 
where cast(start_ts as date) = '13-may-2016' 

但查詢沒有返回任何值。

請幫我找到日期的最大時間戳。

+0

見的許多其他問題,一個關於日期比較時間戳,如這一個:http://stackoverflow.com/questions/30519823/compare-date-in-sql-command – Turophile

+0

_real_ timestamp列沒有「格式」。你爲什麼把它存儲爲一個字符串? –

回答

0

嘗試使用TRUNCTO_DATE代替

WHERE 
    TRUNC(start_ts) = TO_DATE('2016-05-13', 'YYYY-MM-DD') 

或者,你可以使用>=<來避免在start_ts柱使用的功能:

WHERE 
    start_ts >= TO_DATE('2016-05-13', 'YYYY-MM-DD') 
    AND start_ts < TO_DATE('2016-05-14', 'YYYY-MM-DD') 
+0

我試過使用這個,但由於時間戳包含AM/PM與毫秒,它不返回任何值。 – Dinu

0

使用這種格式,而選擇

to_char(systimestamp,'DD-MON-YYYY') 

例如:

從dual中選擇to_char(systimestamp,'DD-MON-YYYY');

-2

這可能不是正確的做法。但我已經使用子字符串函數解決了這個問題。

Select max(start_ts), min(start_ts)from db where SUBSTR(start_ts, 0,9) ='13-may-2016' 

使用此我能夠檢索最大和最小時間戳。

2

如果數據類型是時間戳,那麼可見格式是不相關的。

您應該避免將數據轉換爲日期或使用to_char。相反,比較使用TO_TIMESTAMP()的時間戳數據的時間戳值

WHERE start_ts >= TO_TIMESTAMP('2016-05-13', 'YYYY-MM-DD') 
    AND start_ts < TO_TIMESTAMP('2016-05-14', 'YYYY-MM-DD') 
+0

如果表格包含多個日期的數據並且該表格沒有任何日期字段。日期使用時間戳字段標識。那麼我們如何才能找到特定日期的最大和最小時間戳? – Dinu

+0

MIN和MAX仍然可以使用時間戳。此數據類型只是存儲日期和時間的非常準確的方式 –

+0

是的,我同意。我們可以找到當天的最大時間戳,但我們如何才能找到最新日期的最小時間戳。如果我們從db中使用select min(start_ts),那麼它將返回表中存在的最小時間戳。它不會是最新日期的最小時間戳。由於日期列缺失,我們如何才能找到最新日期的最小時間戳。 – Dinu

2
CAST(timestamp_expression AS DATE) 

例如,查詢是:SELECT CAST(SYSTIMESTAMP AS DATE) FROM dual;