1. 程式人生 > >時間區間查詢條件遇到的問題

時間區間查詢條件遇到的問題

notice start oracle edt 並不是 rtti creat 結果 字符

oracle 數據庫的 TO_CHAR 和 TO_DATE的一些用法總結
做了一個功能是以起始時間和截止時間的區間為條件查詢數據語句如下:
SELECT createdtime FRoM noticeinfo
WHERE noticeinfo.CREATEDTIME, ‘yyyy-mm-dd‘ >= "TO_DATE"(#{starttime},yyyy-mm-dd‘)
and noticeinfo.CREATEDTIME, ‘yyyy-mm-dd‘ <= "TO_DATE"(#{endtime},yyyy-mm-dd‘)
結果發現當起始時間和截止時間相同時不能查出數據,原因是starttime和endtime時間格式只有年月日,而CREATEDTIME的時間格式是年月日時分秒,這樣CREATEDTIME和
endtime年月日相同時,CREATEDTIME卻多出時分秒,這樣使CREATEDTIME大於endtime,進而不符合條件,所以查不到數據。當把CREATEDTIME的時分秒都設置成零時可以
查到,到這並不是我想要的。
解決方案一:使用TO_CHAR()方法截取CREATEDTIME的年月日再做比較
SELECT createdtime FRoM noticeinfo
WHERE to_char(noticeinfo.CREATEDTIME, ‘yyyy-mm-dd‘) >= "TO_DATE"(#{starttime},‘yyyy-mm-dd‘)
and to_char(noticeinfo.CREATEDTIME, ‘yyyy-mm-dd‘) <= "TO_DATE"(#{endtime},‘yyyy-mm-dd‘)
但是這樣語句報錯因為TO_CHAR()方法雖然截取了年月日,卻把日期變成了字符串,不能和日期進行比較。
解決方案二:最後再使用TO_DATE()方法把字符串轉成時間格式
SELECT createdtime FRoM noticeinfo
WHERE "TO_DATE"(to_char(noticeinfo.CREATEDTIME, ‘yyyy-mm-dd‘), ‘yyyy-mm-dd‘) >= "TO_DATE"(#{starttime},‘yyyy-mm-dd‘)
and "TO_DATE"(to_char(noticeinfo.CREATEDTIME, ‘yyyy-mm-dd‘), ‘yyyy-mm-dd‘) <= "TO_DATE"(#{endtime},‘yyyy-mm-dd‘)

時間區間查詢條件遇到的問題