sql编写测试中,使用了 between and 获取到了数据,但是结果集和预期有差异。
结论
- Oracle 对字符串进行日期转换时,如果是年月日的形式,即“2020-01-16”,将会被转为“2019-01-16 00:00:00”
- Oracle 在进行日期比较时,最好直接指定日期比较的格式,不要进行隐式转换
测试过程
- 表结构
CREATE TABLE "YB_DEV"."YB_WC_MONITOR" (
"ID" NVARCHAR2(32) NOT NULL ,
"AMMONIA_DENSITY" NVARCHAR2(10) ,
"HYDROGEN_SULFIDE_DENSITY" NVARCHAR2(10) ,
"DEVICE_CODE" NVARCHAR2(32) ,
"CREATE_TIME" DATE DEFAULT SYSDATE NOT NULL
)
- 对数据按日期进行统计分析(查询15号和16号所有小时的记录)
- 第一种情况(正常运行,但不符合预期)
select to_char(t.CREATE_TIME, 'MM-dd HH24') time, avg(t.AMMONIA_DENSITY) density
from YB_WC_MONITOR t
where t.CREATE_TIME BETWEEN to_date('2020-01-15', 'yyyy-MM-dd') and to_date('2020-01-16', 'yyyy-MM-dd')
group by to_char(t.CREATE_TIME, 'MM-dd HH24')
order by to_char(t.CREATE_TIME, 'MM-dd HH24')
查看结果:
01-15 00 0.0602604166666666666666666666666666666667
01-15 01 0.0444270833333333333333333333333333333333
01-15 02 0.0440104166666666666666666666666666666667
01-15 03 0.04765625
01-15 04 0.0498958333333333333333333333333333333333
01-15 05 0.0509375
01-15 06 0.1755208333333333333333333333333333333333
01-15 07 0.3606770833333333333333333333333333333333
01-15 08 0.2711979166666666666666666666666666666667
01-15 09 0.10734375
01-15 10 0.1194791666666666666666666666666666666667
01-15 11 0.10890625
01-15 12 0.07640625
01-15 13 0.1475
01-15 14 0.125625
01-15 15 0.07453125
01-15 16 0.08140625
01-15 17 0.12453125
01-15 18 0.0636538461538461538461538461538461538462
01-15 19 0.1045416666666666666666666666666666666667
01-15 20 0.0568333333333333333333333333333333333333
01-15 21 0.0683333333333333333333333333333333333333
01-15 22 0.0694583333333333333333333333333333333333
01-15 23 0.09025
01-16 00 0.0571428571428571428571428571428571428571
结果分析:
不符合预期,因为16号只有0点的数据。
- 第二种情况:(正常运行,符合预期)
select to_char(t.CREATE_TIME, 'MM-dd HH24') time, avg(t.AMMONIA_DENSITY) density
from YB_WC_MONITOR t
where to_char(t.CREATE_TIME, 'yyyy-MM-dd') BETWEEN '2020-01-15' and '2020-01-16'
group by to_char(t.CREATE_TIME, 'MM-dd HH24')
order by to_char(t.CREATE_TIME, 'MM-dd HH24')
查看结果:
01-15 00 0.0602604166666666666666666666666666666667
01-15 01 0.0444270833333333333333333333333333333333
01-15 02 0.0440104166666666666666666666666666666667
01-15 03 0.04765625
01-15 04 0.0498958333333333333333333333333333333333
01-15 05 0.0509375
01-15 06 0.1755208333333333333333333333333333333333
01-15 07 0.3606770833333333333333333333333333333333
01-15 08 0.2711979166666666666666666666666666666667
01-15 09 0.10734375
01-15 10 0.1194791666666666666666666666666666666667
01-15 11 0.10890625
01-15 12 0.07640625
01-15 13 0.1475
01-15 14 0.125625
01-15 15 0.07453125
01-15 16 0.08140625
01-15 17 0.12453125
01-15 18 0.0636538461538461538461538461538461538462
01-15 19 0.1045416666666666666666666666666666666667
01-15 20 0.0568333333333333333333333333333333333333
01-15 21 0.0683333333333333333333333333333333333333
01-15 22 0.0694583333333333333333333333333333333333
01-15 23 0.09025
01-16 00 0.060125
01-16 01 0.0469166666666666666666666666666666666667
01-16 02 0.0557916666666666666666666666666666666667
01-16 03 0.0515833333333333333333333333333333333333
01-16 04 0.0494583333333333333333333333333333333333
01-16 05 0.0491666666666666666666666666666666666667
01-16 06 0.0846666666666666666666666666666666666667
01-16 07 0.2150416666666666666666666666666666666667
01-16 08 0.1055
01-16 09 0.124
01-16 10 0.1105833333333333333333333333333333333333
01-16 11 0.0824583333333333333333333333333333333333
01-16 12 0.0681666666666666666666666666666666666667
01-16 13 0.116125
01-16 14 0.08675
01-16 15 0.1010833333333333333333333333333333333333
01-16 16 0.0700416666666666666666666666666666666667
01-16 17 0.064875
01-16 18 0.0619583333333333333333333333333333333333
01-16 19 0.0575833333333333333333333333333333333333
01-16 20 0.0552083333333333333333333333333333333333
01-16 21 0.05875
01-16 22 0.05425
01-16 23 0.0567916666666666666666666666666666666667
结果分析:
数据完整,符合预期值
网友评论