只是sql布尔条件
我需要检查一个值是否在一个范围内,但我不能保证该范围的任何一端不是NULL
。这种情况下的值是整数。 “mo
”表示就业只是sql布尔条件
目前我有以下
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
)
如何:
WHERE (mo.startyear <= r.year OR mo.startyear IS NULL)
AND (mo.endyear >= r.year OR mo.endyear IS NULL)
完美,如果不是早上4点,我可能没有你的帮助就到了这里,但非常感谢! – AlasdairC 2012-02-09 04:53:23
设置的默认值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'))
WHERE r.year BETWEEN(COALESCE(mo.startyear,-9999) AND COALESCE(mo.endyear,9999))
COALESCE首先尝试的第一个参数,如果它为null,去为下一个。所以,除非你的年数少于-9999或超过9999,否则这将起作用。否则,增加这些号码:)这也是ANSI标准
PS:这确实很脏,但它是最紧凑的形式,我能想到的
这是很好的知道,但@eaolson的答案是cuter :) – AlasdairC 2012-02-09 04:54:15
哈哈,我完全同意:) – 2012-02-09 04:55:32
对不起,我应该有规定,这个需要是ANSI SQL。也许这是不可能的,更简单 – AlasdairC 2012-02-09 04:37:50