我有一個包含數據類型日期列的表。沒有時間戳記的記錄
數據從2005年開始通過API格式「MM/DD/YYYY HH12:MI:SS AM」填充,並在某些地方沿着年份改變爲「MM/DD/YYYY」,不知道從何時開始。
現在我需要找出什麼時候開始發生。如何在查詢中使用或不使用時間戳記來分隔記錄?
P.S:表是巨大的,數以百萬計的記錄,所以獲取所有行和排序不會幫助。
我有一個包含數據類型日期列的表。沒有時間戳記的記錄
數據從2005年開始通過API格式「MM/DD/YYYY HH12:MI:SS AM」填充,並在某些地方沿着年份改變爲「MM/DD/YYYY」,不知道從何時開始。
現在我需要找出什麼時候開始發生。如何在查詢中使用或不使用時間戳記來分隔記錄?
P.S:表是巨大的,數以百萬計的記錄,所以獲取所有行和排序不會幫助。
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')
這將發現這是不是在午夜的最後日期:
SELECT MAX(
CASE
WHEN your_column > TRUNC(your_column)
THEN your_column
END
)
FROM your_table
這些記錄*不*有一個時間分量,它只是設置爲午夜。所以你應該用'MM/DD/YYYY 00:00:00'來查看記錄。 – HoneyBadger
可能會轉換爲字符串,然後選擇min(timestamp),其中的長度(cast(timestamp as string)<= 10或任何長度的MM/DD/YYYY – MiloBellano
@MiloBellano DATE **數據類型** always ** has日期和時間組件 - 如果一個值只是作爲每日組件的一部分被插入,那麼小時到秒的組件將默認爲午夜('00:00:00')。將日期轉換爲字符串只會產生一個隱式調用到'TO_CHAR'使用'NLS_DATE_FORMAT'會話參數作爲格式模型 - 並且將會以相同的格式對所有日期進行格式化,而不管時間分量是否爲午夜 – MT0