問題是雙重的。首先日期幾乎肯定有時間分量。 to_date('06-MAR-11','DD-MON-YY')
相當於2011/03/06 00:00:00
。如果您使用TRUNC()
功能,你將能夠看到的一切的那一天:
select *
from test_table
where trunc(creation_date) = to_date('06-MAR-11','DD-MON-YY');
我不使用MON datetime format model。正如我解釋here這取決於你的地區和設置。改用數字月份格式模型更安全。同樣,始終將世紀指定爲一年的一部分。
where trunc(creation_date) = to_date('06-03-YY11','DD-MM-YYYY');
你的第二個問題幾乎肯定是你的NLS_DATE_FORMAT;它似乎沒有考慮到時間,因此你看到4個相同的日期。這僅管理數據顯示的方式而不是如何存儲。
您可以更改此使用類似:
ALTER SESSION SET NLS_DATE_FORMAT = "DD/MM/YYYY HH24:MI:SS"
如果我用建立測試環境如下:
create table test_table (creation_date date);
insert into test_table values (sysdate);
insert into test_table values (sysdate - 0.01);
alter session set nls_date_format = "YYYY/MM/DD";
你可以看到返回不包括時間數據(儘管SYSDATE ):
SQL> select * from test_table;
CREATION_D
----------
2013/04/12
2013/04/12
改變NLS_DATE_FORMAT並執行相同的SELECT,您現在得到一個時間組件:
SQL> alter session set nls_date_format = "YYYY/MM/DD HH24:MI:SS";
Session altered.
SQL> select * from test_table;
CREATION_DATE
-------------------
2013/04/12 12:48:41
2013/04/12 12:34:17
最後,嘗試選擇今天的日期單單沒有行被返回時:
SQL> select *
2 from test_table
3 where creation_date = to_date('20130412','yyyymmdd');
no rows selected
但是,使用TRUNC()
時比較只在現場的日期部分你再次讓所有的行:
SQL> select *
2 from test_table
3 where trunc(creation_date) = to_date('20130412','yyyymmdd');
CREATION_DATE
-------------------
2013/04/12 12:48:41
2013/04/12 12:34:17
要真正回答你的第二個問題,如果你想要獨一無二的約會,你可以重新使用TRUNC()
功能:
select distinct trunc(creation_date)
from test_table
@chaithanya:大部分數據庫都使用Timestamp,所以看看它會在稍後幫助你。 – SenthilPrabhu