我有以下数据:
sql> select * from booking_session; BK_ID|BK_DATE -----|------------------------- 1|18-MAR-12 10.00.00.000000 2|18-MAR-12 10.25.00.000000 3|18-MAR-12 10.30.00.000000 4|18-MAR-12 10.35.00.000000 5|18-MAR-12 10.40.00.000000
我正在尝试编写一个SQL查询,选择所有匹配特定日期的记录,但是我使用时间戳作为BK_DATE字段,无论我尝试什么,我的查询都不会产生任何结果.
1.
select * from booking_session where bk_date = to_date('18-03-2012','dd-mm-yyyy');
2.
select * from booking_session where bk_date = to_timestamp('18-03-2012','dd-mm-yyyy');
3.
select * from booking_session where bk_date = to_date('18-MAR-2012','dd-mm-yyyy');
它只适用于我设置整个日期值的情况;
select * from booking_session WHERE bk_date = '18-MAR-12 11.00.00.000000'; CREATE TABLE BOOKING_SESSION( BK_ID NUMBER NOT NULL,BK_DATE TIMESTAMP,BK_BOOKER NUMBER,BK_CUSTOMER NUMBER,BK_TREATMENT NUMBER,T_SESSION_DATETIME TIMESTAMP,STAFFAPPOINTED NUMBER,BK_ROOM NUMBER ); INSERT INTO BOOKING_SESSION VALUES ( 1,TO_TIMESTAMP('18/03/2012 10:00','DD/MM/YYYY HH24:MI'),1,TO_TIMESTAMP('20/03/2012 11:00',2,1 );
解决方法
您可以通过执行范围来指定整天,如下所示:
WHERE bk_date >= TO_DATE('2012-03-18','YYYY-MM-DD') AND bk_date < TO_DATE('2012-03-19','YYYY-MM-DD')
更简单的是你可以使用TRUNC:
WHERE TRUNC(bk_date) = TO_DATE('2012-03-18','YYYY-MM-DD')
不带参数的TRUNC会从DATE中删除小时,分钟和秒.