oracle 语句between,SQL语句:between关键词的使用

本文详细介绍了在Oracle数据库中如何使用SUM函数和BETWEEN关键字进行数据查询。通过示例展示了BETWEEN在日期区间查询时的全闭区间特性,并讨论了NOT BETWEEN的查询行为。同时,提到了在处理日期格式时需要注意的问题,即必须转换为日期类型以避免Oracle的ORA-01861异常。最后,文章探讨了不同数据库中BETWEEN的实现差异,如MySQL中的半开区间行为。
摘要由CSDN通过智能技术生成

今天使用oracle数据库写SQL,需要查询两个时间内的特定数据之和

用到了sum函数和between函数

关于sum函数的了解:

todo:待添加

关于between函数:

使用方法:

b549ba9197c3?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

between关键词使用方法.png

感谢

https://blog.csdn.net/hpdlzu80100/article/details/80767524

1、sql语句中between的边界:

有如下数据库:

b549ba9197c3?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

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')

结果如下:

b549ba9197c3?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

查询001-024在2018-08-01~2018-08-02的工作时长.jpg

证明在oracle中,between是包含左右全闭区间的。

暂时只在oracle中验证,其他数据库经查阅资料:

在mysql数据库中:

https://blog.csdn.net/u010339647/article/details/52425389

b549ba9197c3?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

修改001-024的2018-08-02时间为0点多一秒.jpg

查询结果不包含2018-08-02零点过一秒的数据:

b549ba9197c3?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

查询结果不包含001-024在2018-08-02零点过一秒的数据.jpg

所以sql语句中between查询时,如果是yyyy-mm-dd格式的,会默认为该日的00:00:00,超过时间则都不在该区间内

那么问题来了:not between 呢?

我们查询001-024不在2018-08-01~2018-08-02的工作时长,最终查询结果:

b549ba9197c3?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

查询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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值