2016-04-25 210 views
1

例如,我有一個像這樣的日期時間'2016-04-02 00:00:00',另一個像這樣的'2016-04-02 15:10:00'。我不在乎時間部分,我希望他們僅僅通過日期部分匹配。如何將Oracle DateTime轉換爲日期

我試過date()to_date,datepart,沒有什麼效果。

+0

我很好奇..你爲什麼需要這樣做?你想解決什麼大問題? – Ditto

+0

什麼是你的日期?什麼是你的約會?請舉例或類似你的願望目標 –

+0

因爲我有一個條件,必須與日期時間的日期匹配......但它不符合兼職時間。我希望你明白我的意思。 – servatj

回答

2

做這樣的:

where yourField >= the start of your date range 
and yourField < the day after the end of your date range 

編輯從這裏開始:

雖然你可以使用trunc,別人的建議請記住,對函數結果進行過濾通常會很慢。

1

正如其他人所說 - 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()。

祝你好運!

相關問題