SQL 日期范围规范,显式与 BETWEEN()

SQL Date Range Specification, Explicit vs BETWEEN()

我对SQL的理解是

WHEN reading_start_dt BETWEEN '2020-02-09' AND '2020-02-15'

相同
WHEN reading_start_dt >= '2019-02-09' AND reading_start_dt <= '2019-02-15'

但是当查询中的唯一区别是日期范围规范时,我得到了完全不同的结果集。
正在返回正确的日期,但数据不同。
Teradata 和 HANA 都在发生这种情况。

我错过了什么吗?

编辑:


SELECT meter_id, reading_meas, reading_interval_start_dttm FROM "_SYS_BIC"."NGDW.SM.PVT/METER_READING"  
WHERE Reading_Start_Dt BETWEEN '2020-02-09' AND '2020-02-15' AND Service_Channel_num = 1 AND Meter_id = 11870690   
ORDER BY Reading_Interval_Start_Dttm


SELECT meter_id, reading_meas, reading_interval_start_dttm FROM "_SYS_BIC"."NGDW.SM.PVT/METER_READING"  
WHERE reading_start_dt >= '2019-02-09' AND reading_start_dt <= '2019-02-15' AND service_channel_num = 1 AND meter_id = 11870690  
ORDER BY Reading_Interval_Start_Dttm

正如我指出的那样,这是我的代码中输入错误的结果
我正在将生产中的某些东西与请求的更改进行比较。 谢谢你的眼光,我周六的时候眼睛明显看的太累了

The correct dates are being returned but the data is different.

你说得好像 data 是一样的,但是结果集有不同的顺序。除非您的查询有 order by 子句,否则数据可以按任何顺序返回。

这两个过滤器完全一样:

WHEN reading_start_dt BETWEEN '2020-02-09' AND '2020-02-15'

WHEN reading_start_dt >= '2019-02-09' AND
     reading_start_dt <= '2019-02-15'

但是,我建议将逻辑编写为:

WHEN reading_start_dt >= '2019-02-09' AND
     reading_start_dt < '2019-02-16'

此版本适用于日期和 date/time 值。

无论使用何种查询语法,您的日期范围都不相同

'2020-02-09' AND '2020-02-15' -- the year is 2020
'2019-02-09' AND '2019-02-15' -- the year here is 2019

这些在句法上是等价的:

WHEN reading_start_dt BETWEEN '2019-02-09' AND '2019-02-15'

WHEN reading_start_dt >= '2019-02-09' AND
     reading_start_dt <= '2019-02-15'

但是描述日期范围的最安全方法是使用 >=< 的组合,如:

WHEN reading_start_dt >= '2019-02-09' AND
     reading_start_dt < '2019-02-16' -- note the increase of date here

无论时间数据有多精确,后一种方法都能准确工作