2017-06-20 129 views
0

我有一個包含數據類型日期列的表。沒有時間戳記的記錄

數據從2005年開始通過API格式「MM/DD/YYYY HH12:MI:SS AM」填充,並在某些地方沿着年份改變爲「MM/DD/YYYY」,不知道從何時開始。

現在我需要找出什麼時候開始發生。如何在查詢中使用或不使用時間戳記來分隔記錄?

P.S:表是巨大的,數以百萬計的記錄,所以獲取所有行和排序不會幫助。

+2

這些記錄*不*有一個時間分量,它只是設置爲午夜。所以你應該用'MM/DD/YYYY 00:00:00'來查看記錄。 – HoneyBadger

+0

可能會轉換爲字符串,然後選擇min(timestamp),其中的長度(cast(timestamp as string)<= 10或任何長度的MM/DD/YYYY – MiloBellano

+1

@MiloBellano DATE **數據類型** always ** has日期和時間組件 - 如果一個值只是作爲每日組件的一部分被插入,那麼小時到秒的組件將默認爲午夜('00:00:00')。將日期轉換爲字符串只會產生一個隱式調用到'TO_CHAR'使用'NLS_DATE_FORMAT'會話參數作爲格式模型 - 並且將會以相同的格式對所有日期進行格式化,而不管時間分量是否爲午夜 – MT0

回答

3

trunc(日期)函數刪除日期的時間部分。對於時間trunc(日期)<>日期和沒有時間trunc(日期)=日期的記錄。

select * 
from your_table 
where trunc(date_column)=date_column; 

編輯:

要帶走任何誤解

to_date('21-07-2017','DD-MM-YYYY') 

等於

to_date('21-07-2017 00:00:00','DD-MM-YYYY HH24:MI:SS') 

等於

trunc(to_date('21-07-2017 09:20:43','DD-MM-YYYY HH24:MI:SS')) 

在我的文字裏沒有時間的日期是指沒有時間日期指定

to_date('21-07-2017','DD-MM-YYYY') 
+0

所有記錄都有時間 - 只是其中的一部分總是在午夜 – MT0

+0

這仍然可以工作 – Rene

+0

@Rene,我認爲MT0的評論是關於你的*解釋*而不是你的建議查詢,它可能會誤導說「有時間的記錄」和「r沒有時間的生態「。 –

4

這將發現這是不是在午夜的最後日期:

SELECT MAX(
     CASE 
      WHEN your_column > TRUNC(your_column) 
      THEN your_column 
     END 
     ) 
FROM your_table