了解 Oracle 中的特定 WHERE 子句

Understanding a specific WHERE clause in Oracle

我将其视为 Oracle SQL 代码的一部分

其中employer.eab_yr || employer.eab_no >= 20173 和 employer.eab_yr || employer.eab_no <= 20202

任何人都可以向我解释这部分代码的作用吗?

它似乎是从雇主 table 获取值,其中 eab_yr 介于 2017 年第 3 个月和 2020 年第 2 个月之间。对吗?

|| 是字符串连接运算符,>= 是大于或等于运算符,<= 是小于或等于运算符。

所以它匹配 employereab_yreab_no 列的字符串连接在数值上大于或等于 20173 且在数值上小于的所有行或等于 20202.

仅此而已。如果不知道关系(可能不止一个,我们无法判断,因为没有给出 FROM 子句))和属性的语义,就无法回答这在语义上意味着什么。你没有透露那些。

假设代码连接年份和月份并试图找到一个范围,那么代码不会像您预期的那样工作。

如果你把范围从 2017 年 9 月到 2017 年 12 月,那么你将得到查询:

where employer.eab_yr || employer.eab_no >= 20179
and   employer.eab_yr || employer.eab_no <= 201712

现在,20201 大于数字 20179 且小于数字 201712,因此您会发现返回了 2020 年 1 月(许多其他意想不到的月份也是如此).

如果要修复它,请使用 2 位数的月份:

where employer.eab_yr || LPAD( employer.eab_no, 2, '0' ) BETWEEN 201709 AND 201712

或使用日期文字:

where  TO_DATE( employer.eab_yr || '-' || employer.eab_no, 'YYYY-MM' )
         BETWEEN DATE '2017-09-01' AND DATE '2017-12-01'

或者,更好的是,修正你的 table,这样你就有一个 DATE 列,而不是单独的 yearmonth 列。

db<>fiddle here