了解Oracle中的特定WHERE子句



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

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

有人能向我解释一下这部分代码的作用吗?

它似乎是从雇主表中获取值,其中eab_yr在2017年第3个月至2020年第2个月之间。这是正确的吗?

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

因此,它匹配employer的列eab_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'

或者,更好的是,修复您的表,使其具有单个DATE列,而不是单独的yearmonth列。

db<gt;小提琴这里

相关内容

  • 没有找到相关文章