只是sql布尔条件

时间:2012-02-09 04:26:25

标签: sql

我需要检查一个值是否在一个范围内,但我无法保证范围的任何一端都不是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

3 个答案:

答案 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:这确实很脏,但它是我能想到的最紧凑的形式