postgresql - 如何在postgresql的WHERE子句中使用CASE语句的END变量?
问题描述
假设我有这个查询
SELECT
s.name,
s.last_name,
s.created_date,
s.new_flag,
s.enrolled_date
CASE WHEN s.created_date IS NOT NULL AND s.new_flag IS = 0 THEN s.enrolled_date ELSE s.exit_date
END filter_query
FROM student.s WHERE TO_CHAR(filter_query,'YYYY-MM-DD') = TO_CHAR(NOW(), 'YYYY-MM-DD');
上面的这个查询说 filter_query 列不存在。我们怎样才能使这个 filter_query 在TO_CHAR
函数中工作?
解决方案
您不能filter_query
对WHERE
条件中的表达式使用别名,因为条件是在列表之前WHERE
评估的。SELECT
您可以使用子查询:
SELECT name,
last_name,
created_date,
new_flag,
enrolled_date,
filter_query
FROM (SELECT s.name,
s.last_name,
s.created_date,
s.new_flag,
s.enrolled_date,
CASE WHEN s.created_date IS NOT NULL
AND s.new_flag IS = 0
THEN s.enrolled_date
ELSE s.exit_date
END filter_query
FROM student.s) AS subq
WHERE TO_CHAR(filter_query, 'YYYY-MM-DD') = TO_CHAR(NOW(), 'YYYY-MM-DD');
推荐阅读
- c# - 如何在 C# 中查找多个字符的位置?
- javascript - 如何在循环内使用类名更改innerHTML
- javascript - 当屏幕看起来时,websocket 连接关闭(在移动浏览器上)
- docusignapi - Docusign Clickwrap“Save_UserAgreement_Error”接受错误
- r - 将每一行的所有列连接为一个字符串,并将其写入 R 中的另一个数据帧
- javascript - 如何将数据传递给组件?
- javascript - 如何使用 useState 更新数据?
- html - 为什么输出右侧有一个空格?如何使用引导程序 4 填充空格?
- c# - 没有元数据的 C# OData URI 解析器?
- c# - 自定义 CheckedListBox 的 Item.Clear()