我需要检查一个值是否在一个范围内,但我无法保证范围的任何一端都不是NULL
。这种情况下的值是整数。 'mo
代表就业
目前我有以下
WHERE (r.year BETWEEN mo.startyear AND mo.endyear >= r.year)
OR (mo.startyear <= r.year AND mo.endyear IS null)
OR (mo.startyear IS null AND mo.endyear IS null)
OR (mo.startyear IS null AND mo.endyear >= r.year)
这是检查特定年份mo
被“雇用”的唯一方法(r
)
答案 0 :(得分:0)
设置NULL的默认值。如果你正在使用Oracle,那么就像:
WHERE r.year
BETWEEN nvl(mo.startyear,to_date('01/01/1990','dd/mm/yyyy'))
AND nvl(mo.endyear,to_date('31/12/4701','dd/mm/yyyy'))
答案 1 :(得分:0)
怎么样:
WHERE ( mo.startyear <= r.year OR mo.startyear IS NULL )
AND ( mo.endyear >= r.year OR mo.endyear IS NULL )
答案 2 :(得分:0)
WHERE r.year BETWEEN(COALESCE(mo.startyear,-9999) AND COALESCE(mo.endyear,9999))
COALESCE首先尝试第一个参数,如果它为null,则为下一个参数。因此,除非您的年份小于-9999或超过9999,否则这将有效。否则,增加这些数字:)这也是ansi标准
PS:这确实很脏,但它是我能想到的最紧凑的形式