今天使用oracle数据库写SQL,需要查询两个时间内的特定数据之和
用到了sum函数和between函数
关于sum函数的了解:
todo:待添加
关于between函数:
使用方法:
between关键词使用方法.png
感谢
https://blog.csdn.net/hpdlzu80100/article/details/80767524
1、sql语句中between的边界:
有如下数据库:
sum函数与between函数数据库图.jpg
使用如下sql语句查询001-024这个设备在2018-08-01~2018-08-02分别的工作时长:
SELECT
RUNNING_TIME
FROM
"T_EQ_SCADA_RUNNING_TIME"
WHERE
code = '001-024' AND working_date BETWEEN
to_date( '2018-08-01', 'yyyy-mm-dd' )
AND
to_date('2018-08-02','yyyy-mm-dd')
结果如下:
查询001-024在2018-08-01~2018-08-02的工作时长.jpg
证明在oracle中,between是包含左右全闭区间的。
暂时只在oracle中验证,其他数据库经查阅资料:
在mysql数据库中:
https://blog.csdn.net/u010339647/article/details/52425389
修改001-024的2018-08-02时间为0点多一秒.jpg
查询结果不包含2018-08-02零点过一秒的数据:
查询结果不包含001-024在2018-08-02零点过一秒的数据.jpg
所以sql语句中between查询时,如果是yyyy-mm-dd格式的,会默认为该日的00:00:00,超过时间则都不在该区间内
那么问题来了:not between 呢?
我们查询001-024不在2018-08-01~2018-08-02的工作时长,最终查询结果:
查询001-024不在2018-08-01~2018-08-02的工作时长.jpg
查到了001-024设备在2018-08-03工作时长。
所以答案是不包含,左右全开区间。
2、between时间的格式问题
在between后的日期,
SELECT
RUNNING_TIME
FROM
"T_EQ_SCADA_RUNNING_TIME"
WHERE
code = '001-024' AND working_date BETWEEN '2018-08-01' AND '2018-08-02'
则会报 Oracle 异常 ORA-01861: literal does not match format string(字符串格式不匹配)
问题在于直接写入了字符串格式,数据库不识别
应使用如下语句:
to_date( '2018-08-01', 'yyyy-mm-dd' ) AND to_date('2018-08-02','yyyy-mm-dd')
感谢:
解决:Oracle 异常 ORA-01861: literal does not match format string(字符串格式不匹配)
https://blog.csdn.net/qq122261257/article/details/8613735/