從輸出來看,它看起來像你將START_DATE定義爲時間戳。如果這是一個正常的日期,Oracle將能夠處理隱式轉換。但是,因爲它不是你需要明確地將這些字符串轉換爲日期。
SQL> alter session set nls_date_format = 'dd-mon-yyyy hh24:mi:ss'
2/
Session altered.
SQL>
SQL> select * from t23
2 where start_date between '15-JAN-10' and '17-JAN-10'
3/
no rows selected
SQL> select * from t23
2 where start_date between to_date('15-JAN-10') and to_date('17-JAN-10')
3/
WIDGET START_DATE
------------------------------ ----------------------
Small Widget 15-JAN-10 04.25.32.000
SQL>
但是我們仍然只得到一行。這是因爲START_DATE有一個時間元素。如果我們不指定時間組件,Oracle默認它是午夜。這是罰款的BETWEEN
的從的一面,但不是爲直到方:
SQL> select * from t23
2 where start_date between to_date('15-JAN-10')
3 and to_date('17-JAN-10 23:59:59')
4/
WIDGET START_DATE
------------------------------ ----------------------
Small Widget 15-JAN-10 04.25.32.000
Product 1 17-JAN-10 04.31.32.000
SQL>
編輯
如果你不能在時間成分通過有一對夫婦的選擇。一種是改變WHERE子句從標準中刪除了時間元素:
where trunc(start_date) between to_date('15-JAN-10')
and to_date('17-JAN-10')
這可能會對性能產生影響,因爲它在不夠格START_DATE任何B樹索引。你需要建立一個基於函數的索引。
或者你可以在時間元素添加到日期代碼:
where start_date between to_date('15-JAN-10')
and to_date('17-JAN-10') + (86399/86400)
因爲這些問題很多人喜歡通過檢查日期界限這樣來避免使用between
:
where start_date >= to_date('15-JAN-10')
and start_date < to_date('18-JAN-10')
來源
2010-03-03 07:02:40
APC
我無法通過時間唯一的日期。 – 2010-03-03 09:18:01
哇,它工作的很好APC ...非常感謝您的支持 – 2010-03-03 12:18:47
@APC在ORACLE 11中工作得像魅力G – Alex 2016-08-05 15:10:33