繁体   English   中英

BETWEEN和标准比较运算符Oracle SQL

[英]BETWEEN and standard comparison operators Oracle SQL

由于我需要数据范围,因此我正在使用BETWEEN ,因为据我所知,以下两个查询应该相同:

select * from table1 where my_date1 - my_date2 between (-1) and (-30);

select * from table1 where my_date1 - my_date2 <= (-1) and my_date1 - my_date2 >= (-30);

但是,当我在脚本中尝试时:

SELECT  
       a.account_no AS ACCOUNT_NO, 
       a.installment_no AS INSTALLMENT_NO, 
       a.INSTALLMENT_DATE AS INSTALLMENT_DATE 
FROM myTable a 
     INNER JOIN (SELECT 
                        ACCOUNT_NO,
                        MIN(INSTALLMENT_NO) AS INSTALLMENT_NO 
                 FROM myTable  
                 WHERE 
                      ACCOUNT_NO IS NOT NULL 
                      AND INSTALLMENT_NO IS NOT NULL 
                      AND STATUS = 'A'
                      GROUP BY ACCOUNT_NO) b 
     ON A.ACCOUNT_NO = B.ACCOUNT_NO AND A.INSTALLMENT_NO = B.INSTALLMENT_NO
WHERE (TRUNC(INSTALLMENT_DATE) - TRUNC(TO_DATE('12/01/2011','DD/MM/YYYY'))) BETWEEN (-1) AND (-30) -- If I change this

我有0行,但是当我改变时

WHERE (TRUNC(INSTALLMENT_DATE) - TRUNC(TO_DATE('12/01/2011','DD/MM/YYYY'))) BETWEEN (-1) AND (-30)

WHERE (TRUNC(INSTALLMENT_DATE) - TRUNC(TO_DATE('12/01/2011','DD/MM/YYYY'))) <= (-1) and (TRUNC(INSTALLMENT_DATE) - TRUNC(TO_DATE('12/01/2011','DD/MM/YYYY')))  >= (-30)

我得到超过0行。 我想使用BETWEEN因为它更具可读性。 我想念什么吗?

我相信BETWEEN使用的范围的语法是:

WHERE col BETWEEN <smaller_value> AND <larger_value>

相当于

WHERE col >= <smaller_value> AND col <= <larger_value>

您当前的WHERE子句正在寻找日期差大于 -1小于 -30 这将消除您尝试定位的所有记录,并且实际上永远不会是真实的。 要解决此问题,请更正范围:

WHERE (TRUNC(INSTALLMENT_DATE) - TRUNC(TO_DATE('12/01/2011','DD/MM/YYYY')))
    BETWEEN (-30) AND (-1)

https://docs.oracle.com/cd/B28359_01/server.111/b28286/conditions011.htm#SQLRF52147说:

expr1 [否]在expr2和expr3之间

如果expr3 <expr2,则间隔为空。

BETWEEN是一种语法快捷方式,其评估为

WHERE col >= [smaller_value] AND <= [larger_value]

并且比较的值以该顺序(从小到大)显示是至关重要的,否则将永远无法满足。


但是,我绝不建议在日期范围之间使用,而建议始终使用以下语法:

WHERE col >= [smaller_value] AND < [larger_value]+1

此语法允许对任何时间精度级别的日期/时间信息进行精确过滤。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM