sql - 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
。我不知道我做错了什么。
解决方案
如果我正确理解了您的问题,您可以用这样的 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'))
推荐阅读
- sas - SAS:用缺失值计算平均值
- swift - 使用滑块在 2 个图像之间转换
- coq - “==>”在coq中是什么意思?
- amazon-web-services - 对 S3* 和 *S3-Glacier 服务使用 *storage-class 'Glacier' 感到困惑
- python - 如何在 Google Colab 上的 Jupyter 笔记本中导入自定义 Python 包和模块?
- r - 创建多列分面函数
- android - 如何使我的底部工作表模式可滚动?
- android - 如果没有上传整个数据,有没有办法删除 Firebase-Storage 数据?
- java - 程序关闭并再次运行后无法第二次写入文件。只保存第一次
- python - AWS Lambda、Python 和 Plotly:通过 plotly.offline.plot() 生成 SVG 似乎不起作用