例如,我有一個像這樣的日期時間'2016-04-02 00:00:00'
,另一個像這樣的'2016-04-02 15:10:00'
。我不在乎時間部分,我希望他們僅僅通過日期部分匹配。如何將Oracle DateTime轉換爲日期
我試過date()
,to_date
,datepart
,沒有什麼效果。
例如,我有一個像這樣的日期時間'2016-04-02 00:00:00'
,另一個像這樣的'2016-04-02 15:10:00'
。我不在乎時間部分,我希望他們僅僅通過日期部分匹配。如何將Oracle DateTime轉換爲日期
我試過date()
,to_date
,datepart
,沒有什麼效果。
截斷日期到日期應該做的伎倆。文檔瀏覽: https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions201.htm
例如
SELECT TRUNC(SYSDATE, 'DAY') FROM DUAL;
做這樣的:
where yourField >= the start of your date range
and yourField < the day after the end of your date range
編輯從這裏開始:
雖然你可以使用trunc
,別人的建議請記住,對函數結果進行過濾通常會很慢。
正如其他人所說 - Oracle中沒有單獨的「日期」數據類型。將純粹的「日期」存儲爲時間部分設置爲00:00:00(一天的午夜)的日期,並且TRUNC(日期)將採用任何日期並截斷時間至00:00 :00,所以如果你需要比較兩個日期,你可以寫
where trunc(date_1) = trunc(date_2)
如果你的表是非常大的,你需要經常做這些比較,這是不理想的,因爲內函數調用包裝列的值(如date_1在TRUNC中)可以防止使用您在date_1列上可能具有的索引。如果你需要比較兩列中的約會,你可能沒有多少選擇的餘地,但如果你比較固定的日期(或類似的東西SYSDATE),你可能會更好的東西去像
where date_1 >= trunc(sysdate) and date_1 < trunc(sysdate) + 1
給你不在列值上使用trunc,因此如果列上有索引,Oracle可以自由使用它 - trunc(sysdate)只計算一次,而不是每一行。順便說一句「+1」的意思是「增加一天」。
TO_DATE將字符串轉換爲日期;如果您將TO_DATE應用於已經是合法日期的值,則會得到意想不到的結果,因爲Oracle會首先將您的真實日期轉換爲字符串,然後再次返回日期,並且由於這些轉換需要字符串的日期FORMAT,並且Oracle假定從日期到字符串以及從字符串到日期的轉換格式可能不匹配,....您會明白。據我所知,Oracle中不存在DATE()(函數)和DATEPART;當您使用新的語言時,請將Google關閉並經常使用它。
如果您輸入的是沒有時間分量的日期,例如TO_DATE('04-apr-2016, 'dd-mon-yyyy')
,則隱式時間爲00:00:00,因此您不需要對其應用TRUNC()。
祝你好運!
我很好奇..你爲什麼需要這樣做?你想解決什麼大問題? – Ditto
什麼是你的日期?什麼是你的約會?請舉例或類似你的願望目標 –
因爲我有一個條件,必須與日期時間的日期匹配......但它不符合兼職時間。我希望你明白我的意思。 – servatj