首页 > 解决方案 > WHERE 子句中 CASE 中的布尔表达式不起作用

问题描述

我在 Firebird 2.5 版本中遇到了 Firebird SQL 语句的问题。

根据今天的日期,我必须选择本月的数据或上个月的数据。

SELECT * FROM FA_DOBAVNICA
WHERE
1=1

AND CASE WHEN
    extract(day from cast('Now' as date)) < 9
THEN
   DATUM_NAROCILA BETWEEN 'start of previous month' AND 'end of previous month'
ELSE
   DATUM_NAROCILA BETWEEN 'start of this month' AND 'end of this month'
END 

我收到一个104错误Token unknown for BETWEEN。我不知道我做错了什么。

标签: sqlcasewhere-clausefirebirdfirebird2.5

解决方案


如果我正确理解了您的问题,您可以用这样的 or 子句重新表述它,它应该可以完成工作:

SELECT * FROM FA_DOBAVNICA
WHERE
1=1
AND 
((extract(day from cast('Now' as date)) < 9 AND DATUM_NAROCILA BETWEEN 'start of previous month' AND 'end of previous month')
or
(extract(day from cast('Now' as date)) > 8 AND DATUM_NAROCILA BETWEEN 'start of this month' AND 'end of this month'))

推荐阅读