SQL语句:between关键词的使用

2019-01-15  本文已影响0人  我就要取名叫夏末

今天使用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

待测试内容:
https://blog.csdn.net/lijunjie818/article/details/72416986
当我们修改001-024的设备,使它的时间为2018-08-02,0点多一秒时:

修改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/

上一篇 下一篇

猜你喜欢

热点阅读