2012-11-12 59 views
4

,我有以下數據:甲骨文: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, 
    1, 
    1, 
    TO_TIMESTAMP('20/03/2012 11:00', 'DD/MM/YYYY HH24:MI'),2,1 
); 

回答

5

答案由尼古拉斯·克拉斯諾夫

SELECT * 
FROM BOOKING_SESSION 
WHERE TO_CHAR(T_SESSION_DATETIME, 'DD-MM-YYYY') ='20-03-2012'; 
15

您可以通過執行一系列指定了一整天,就像這樣:

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秒。

+0

+1,但我會用TO_TIMESTAMP因爲這是bk_date'的'數據類型提供。 –

+0

以上都沒有得到任何東西,只有當我給它整個(18 - MAR - 12 10.40.00.000000)只有它的作品 –

+0

@JoseDavidGarciaLlanos你是否改變日期到你正在尋找的('2012-03-18 「)? – n00b