2 回答

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個(gè)贊
日期始終具有以下組成部分:年、月、日、小時(shí)、分鐘和秒。用戶(hù)界面并不總是顯示所有這些組件(但它們?nèi)匀皇冀K存在)。
如果您的TRACE_ON列有日期2019-09-05T12:34:56并且您正在嘗試查看它是否是,BETWEEN '05-SEP-19' AND '05-SEP-19'那么 Oracle 將(假設(shè)匹配N(xiāo)LS_DATE_FORMAT會(huì)話(huà)參數(shù))將字符串轉(zhuǎn)換為午夜的日期并且2019-09-05T12:34:56 BETWEEN 2019-09-05T00:00:00 AND 2019-09-05T00:00:00為假,因此不會(huì)返回該行。
將您的查詢(xún)更改為:
SELECT
-- ...
TO_CHAR( TRACE_ON, 'YYYY-MM-DD HH24:MI:SS' ),
-- ...
FROM (
SELECT
-- ...
FROM GUEST_RSV_TRACES
INNER JOIN NAME_RESERVATION
ON ( guest_rsv_traces.resv_name_id = name_reservation.resv_name_id )
WHERE trace_on >= TO_DATE( '$desde', 'DD-MON-RR' )
AND trace_on < TO_DATE( '$hasta', 'DD-MON-RR' ) + INTERVAL '1' DAY
AND -- ...
GROUP BY
-- ...
)

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊
如果要與這些“日期”進(jìn)行比較的列是DATE數(shù)據(jù)類(lèi)型,則不應(yīng)將其與strings進(jìn)行比較,因?yàn)?#39;05-SEP-19'(以及所有其他值)是字符串,而不是日期。不要依賴(lài)隱式轉(zhuǎn)換 - 使用to_date函數(shù)或日期文字。
例如:
between date '2019-09-05' and date '2019-09-05'
或(假設(shè)您的 NLS 設(shè)置設(shè)置為英語(yǔ))
between to_date('05-sep-19', 'dd-mon-rr') and to_date('05-sep-19', 'dd-mon-rr')
因?yàn)?,如果你做?duì)了,那么在預(yù)期的工作之間??匆豢矗?/p>
SQL> create table test (id, datum) as
2 select 1, date '2019-09-04' from dual union all
3 select 2, date '2019-09-05' from dual union all --> this ...
4 select 3, date '2019-09-05' from dual union all --> ... and this are between 05.09.2019 and 05.09.2019
5 select 4, date '2019-09-06' from dual;
Table created.
SQL> alter session set nls_date_Format = 'dd.mm.yyyy';
Session altered.
SQL> select * From test
2 where datum between date '2019-09-05' and date '2019-09-05';
ID DATUM
---------- ----------
2 05.09.2019
3 05.09.2019
SQL>
- 2 回答
- 0 關(guān)注
- 408 瀏覽
添加回答
舉報(bào)