1

次のデータを含むサンプル テーブルを作成しました。

CREATE TABLE AAA (  DT DATE   );
insert into aaa (DT) values (to_date('13-01-2013', 'dd-mm-yyyy'));
insert into aaa (DT) values (to_date('14-01-2013', 'dd-mm-yyyy'));
insert into aaa (DT) values (to_date('15-01-2013', 'dd-mm-yyyy'));
insert into aaa (DT) values (to_date('16-01-2013', 'dd-mm-yyyy'));
insert into aaa (DT) values (to_date('17-01-2013', 'dd-mm-yyyy'));
insert into aaa (DT) values (to_date('18-01-2013', 'dd-mm-yyyy'));
insert into aaa (DT) values (to_date('19-01-2013', 'dd-mm-yyyy'));
insert into aaa (DT) values (to_date('20-01-2013', 'dd-mm-yyyy'));
insert into aaa (DT) values (to_date('21-01-2013', 'dd-mm-yyyy'));
insert into aaa (DT) values (to_date('22-01-2013', 'dd-mm-yyyy'));
insert into aaa (DT) values (to_date('23-01-2013', 'dd-mm-yyyy'));
insert into aaa (DT) values (to_date('24-01-2013', 'dd-mm-yyyy'));
insert into aaa (DT) values (to_date('25-01-2013', 'dd-mm-yyyy'));
insert into aaa (DT) values (to_date('26-01-2013', 'dd-mm-yyyy'));
insert into aaa (DT) values (to_date('27-01-2013', 'dd-mm-yyyy'));

commit;

次に、次のクエリは異常な結果を返します: (7 ではなく 15 レコード)

select count(*) from aaa d
where 
(d.dt > sysdate)
or
d.dt < to_date(20130120,'yyyymmdd')

しかし、「OR」の左側と右側を変更すると、正しい結果が返されます: (7 レコード)

select count(*) from aaa d
where 
d.dt < to_date(20130120,'yyyymmdd')
or
(d.dt > sysdate)

この問題の内容と解決方法を知っている人はいますか?

追加: d.dt を d.dt+1 に置き換えると、この問題も解決します。

d.dt+1 > sysdate+1
4

1 に答える 1