Oracle:SQL选择带时间戳的日期

前端之家收集整理的这篇文章主要介绍了Oracle:SQL选择带时间戳的日期前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下数据:

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字段,无论我尝试什么,我的查询都不会产生任何结果.

sql:我尝试了以下查询,但它们没有产生任何结果

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中删除小时,分钟和秒.

猜你在找的Oracle相关文章