最近改bug时,发现了这么个尴尬的bug,查询参数在日期起与日期止(包含临界值)
当时很直接的就想到了between and 语句,数值的 between and的是包含临界值的,所以日期我就用上了。
后来环境的时间带时分秒,奇葩的时间就发生了!
还原场景如下:(表只为说明,所以约束什么都没加)
create table testbetween
(
id number,
cid varchar2(4),
rqq date,
rqz date
);
插入数据:
insert into testbetween (ID, CID, RQQ, RQZ)
values (1, '1', to_date('01-07-2012', 'dd-mm-yyyy'), to_date('01-08-2012', 'dd-mm-yyyy'));
insert into testbetween (ID, CID, RQQ, RQZ)
values (2, '2', to_date('01-07-2012', 'dd-mm-yyyy'), to_date('01-08-2012', 'dd-mm-yyyy'));
insert into testbetween (ID, CID, RQQ, RQZ)
values (3, '3', to_date('01-07-2012', 'dd-mm-yyyy'), to_date('01-08-2012', 'dd-mm-yyyy'));
insert into testbetween (ID, CID, RQQ, RQZ)
values (4, '4', to_date('01-07-2012', 'dd-mm-yyyy'), to_date('01-07-2012', 'dd-mm-yyyy'));
insert into testbetween (ID, CID, RQQ, RQZ)
values (5, '5', to_date('01-07-2012', 'dd-mm-yyyy'), to_date('01-07-2012', 'dd-mm-yyyy'));
insert into testbetween (ID, CID, RQQ, RQZ)
values (9, '9', to_date('01-07-2012', 'dd-mm-yyyy'), to_date('01-07-2012', 'dd-mm-yyyy'));
insert into testbetween (ID, CID, RQQ, RQZ)
values (10, '10', to_date('01-07-2012', 'dd-mm-yyyy'), to_date('01-07-2012', 'dd-mm-yyyy'));
insert into testbetween (ID, CID, RQQ, RQZ)
values (11, '11', to_date('01-07-2012', 'dd-mm-yyyy'), to_date('01-07-2012', 'dd-mm-yyyy'));
查询语句如下:
--有结果
select * from testbetween where id between 1 and 11;
--有结果
select * from testbetween where cid between 1 and 11;
--有结果
select * from testbetween where to_date('2012-8-1','yyyy-mm-dd') between rqq and rqz;
--有结果
select * from testbetween where to_date('2012-8-1 00:00:00','yyyy-mm-dd hh24:mi:ss') between rqq and rqz;
--无结果
select * from testbetween where to_date('2012-8-1 00:00:01','yyyy-mm-dd hh24:mi:ss') between rqq and rqz;