带有 age() 函数的 Postgresql WHERE [重复]
问题:带有 age() 函数的 Postgresql WHERE [重复] 我很确定以前有人问过这个问题,但是我正在努力为包含以下数据的表获取正确的语法 id date type report item_id 1 2018-11-07 Veröffentlichung des 9-Monats-Berichtes TRUE 16 2 2018-11-06 Veröffentlichung des
·
问题:带有 age() 函数的 Postgresql WHERE [重复]
我很确定以前有人问过这个问题,但是我正在努力为包含以下数据的表获取正确的语法
id date type report item_id
1 2018-11-07 Veröffentlichung des 9-Monats-Berichtes TRUE 16
2 2018-11-06 Veröffentlichung des 9-Monats-Berichtes TRUE 17
3 2019-03-07 Veröffentlichung des Jahresberichtes TRUE 17
4 2019-05-10 Bericht zum 1. Quartal TRUE 17
我试图制定的查询是
SELECT date, AGE(now(), date) as t1
FROM dates
WHERE t1 > 0
这意味着我只是在寻找过去的价值。
但是,我收到一个错误
错误:列“t1”不存在
(当然,它是一个别名)。 Postgresql 在这里不支持别名吗?
解答
您不能在WHERE
条件中引用别名,因为逻辑上WHERE
在SELECT
之前执行。
您可以使用子查询:
SELECT *
FROM (SELECT date, AGE(now(), date) as t1
FROM dates) sub
WHERE sub.t1 > interval '0::seconds';
或者LATERAL
(我最喜欢的方式):
SELECT date, s.t1
FROM dates
,LATERAL (SELECT AGE(now(), date) as t1) AS s
WHERE s.t1 > interval '0::seconds';
或者重复表达(违反DRY 原则):
SELECT date, AGE(now(), date) as t1
FROM dates
WHERE AGE(now(), date) > interval '0::seconds';
至于计算AGE
,你真的不需要它,因为你可以将它重写为date > now()
。
相关文章:
PostgreSQL:在同一查询中使用计算列
MySQL - 搜索到自定义列
为什么“linq to sql”查询与常规SQL查询不同,以FROM关键字开头?
更多推荐
已为社区贡献19912条内容
所有评论(0)