我有以下数据:
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
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一个sql查询,选择与某个日期匹配的所有记录,但是我正在使用该BK_DATE字段的时间戳,无论我尝试什么,我的查询都不会产生任何结果.
SQL:我尝试了以下查询,但它们没有产生任何结果
1.
select *
from booking_session
where bk_date = to_date('18-03-2012', 'dd-mm-yyyy');
Run Code Online (Sandbox Code Playgroud)
2.
select *
from booking_session
where bk_date = to_timestamp('18-03-2012', 'dd-mm-yyyy');
Run Code Online (Sandbox Code Playgroud)
3.
select *
from booking_session
where bk_date = to_date('18-MAR-2012', 'dd-mm-yyyy');
Run Code Online (Sandbox Code Playgroud)
它只适用于我设置整个日期值的情况;
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,
1,
1,
TO_TIMESTAMP('20/03/2012 11:00', 'DD/MM/YYYY HH24:MI'),2,1
);
Run Code Online (Sandbox Code Playgroud)
n00*_*00b 17
您可以通过执行范围来指定整天,如下所示:
WHERE bk_date >= TO_DATE('2012-03-18', 'YYYY-MM-DD')
AND bk_date < TO_DATE('2012-03-19', 'YYYY-MM-DD')
Run Code Online (Sandbox Code Playgroud)
更简单的是你可以使用TRUNC:
WHERE TRUNC(bk_date) = TO_DATE('2012-03-18', 'YYYY-MM-DD')
Run Code Online (Sandbox Code Playgroud)
不带参数的TRUNC会从DATE中删除小时,分钟和秒.
答案由Nicholas Krasnov提供
SELECT *
FROM BOOKING_SESSION
WHERE TO_CHAR(T_SESSION_DATETIME, 'DD-MM-YYYY') ='20-03-2012';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
143144 次 |
| 最近记录: |