當談到Oracle時,我並不是一個特別優秀的人,因爲我對數據庫的大部分經驗都來自SQL服務器。用TRUNC和TO_DATE截斷oracle中的java格式化日期()
我有一個java日期,我想轉換爲只是一個簡單的日期(不包括時間或時區)在oracle中,所以我可以使用它與自定義mybatis SQL語句,將簡單地搜索是否日期與用戶界面上輸入的日期相同。我的模擬oracle查詢鏡像MyBatis中發生的事情在下面寫爲我的失敗WHERE子句。
我的日期以'Wed Jun 19 00:00:00 BST 2013'的格式輸入Oracle,不幸的是我沒有很多靈活性。
我的失敗WHERE子句是這樣的:
where TRUNC(s.logged_date) = to_date('Wed Jun 19 00:00:00 BST 2013', 'DD-MON-YYYY');
它失敗,出現錯誤: ORA-01858:一個非數字字符被發現,其中一個數字預期。
我在表的日期被存儲在一個DATE數據格式,我期待產生一個WHERE子句,使得
WHERE TRUNC(s.logged_date) = some date in the year
返回行。
使用WHERE子句,我正在尋找日期等價而不考慮時間。 s.logged_date中的值的格式是在DATE數據類型列中的DD-MON-YYYY中。
我真的希望你能夠幫助我,因爲我已經使用過任何我必須上手的書,並且在互聯網上搜索了相當長的一段時間,試圖產生一個正確的WHERE子句。
感謝
+0
「表中的我的日期以DD-MON-YYYY格式存儲」 - 他們真的嗎?如果是這樣,*爲什麼*他們是這樣存儲的?你爲什麼不把它們存儲在DATE字段中,這是一個日期,沒有任何固有的格式?您需要區分真實數據以及它如何在SQL工具中進行格式化。 –
+0
除非它有時間元素,否則不需要「trunc」'logged_date'值;你可以用'to_char(logged_date,'DD-MON-YYYY HH24:MI:SS')'來檢查。你的'to_date'很明顯使用了一個與字符串值不相似的格式掩碼,所以不會令人驚訝的失敗;它試圖將'我們'當作一天的數字,從DD'開始。你是否必須處理參數值中的不同時區? –
+0
@JonSkeet我對這一部分表示歉意。我想說的是,它是作爲DATE數據類型存儲的,數據在oracle中顯示爲格式DD-MON-YYYY(可能是默認值)。 我會爲此編輯我的帖子。 –