【发布时间】:2014-03-10 22:26:03
【问题描述】:
我试图按特定日期过滤结果,但是当我使用下面的代码时,我只会得到 CloseDate 与当前日期匹配的结果。当 CloseDate 为 Null 时,它不包括 ResolvedDate 的结果。 我试过了:
(CASE WHEN (Closedate IS Null) then ResolvedDate, ELSE CloseDate END) AS FinalDate
然后它声明:
"column FinalDate does not exist"
还有其他方法可以做到吗?
这是目前为止的代码。感谢您的帮助。
SELECT
id,
(CASE WHEN (Closedate IS Null) then ResolvedDate, ELSE CloseDate END),
FROM cases
WHERE (EXTRACT (month FROM Closedate) = EXTRACT(month FROM current_date))
AND ( EXTRACT(day from Closedate) = EXTRACT(day FROM current_date))
【问题讨论】:
-
有了你的 where 子句,因为它是 CloseDate 无论如何都不能为空。但是,您可以只使用
COALESCE(CloseDate, ResolvedDate)。如果你做了类似CloseDate >= current_date AND CloseDate < current_date + interval1 day'` 之类的事情,这也将是一个更有意义的查询 -
ResolveDate 之后删除逗号..除非 postgres 像那样奇怪。
-
表定义将符合这样的问题。我们需要准确的数据类型。
-
嗨,我在多余的逗号上弄错了,它不应该在那里。
-
您不能在 where 子句中引用列别名,您需要重复表达式,或者将表达式放在子查询中,然后应用 where 子句。
标签: sql postgresql case