我将其视为Oracle SQL代码的一部分
其中employer.eab_yr||employer.eab_no>=20173和employer.eab_yr|| employer.eab_no<=20202
有人能向我解释一下这部分代码的作用吗?
它似乎是从雇主表中获取值,其中eab_yr在2017年第3个月至2020年第2个月之间。这是正确的吗?
||
是字符串串联运算符,>=
是大于或等于运算符,<=
是小于或等于运算符。
因此,它匹配employer
的列eab_yr
和eab_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
列,而不是单独的year
和month
列。
db<gt;小提琴这里