6

私は次のデータを持っています:

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.1。

select * 
from booking_session
where bk_date = to_date('18-03-2012', 'dd-mm-yyyy');

2.2。

select * 
from booking_session
where bk_date = to_timestamp('18-03-2012', 'dd-mm-yyyy');

3.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
);
4

2 に答える 2

18

次のように範囲を指定して、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から時、分、秒を削除します。

于 2012-11-12T02:35:23.687 に答える
7

ニコラス・クラスノフによる回答

SELECT *
FROM BOOKING_SESSION
WHERE TO_CHAR(T_SESSION_DATETIME, 'DD-MM-YYYY') ='20-03-2012';
于 2012-11-12T05:16:50.240 に答える