2

created_at - 带有 timzone 的类型时间戳

询问:

 select id, 
           created_at,
           extract(epoch from CURRENT_TIMESTAMP - created_at) as delta_sec
    from shop_order

成功的工作。好的。

现在我只想显示delta_sec > 10000的记录

我试试这个:

select id, 
       created_at,
       extract(epoch from CURRENT_TIMESTAMP - created_at) as delta_sec
from shop_order
where delta_sec > 10000

但我得到错误:

ERROR:  column "delta_sec" does not exist
LINE 5: where delta_sec > 10000
              ^
SQL state: 42703
Character: 125
4

2 回答 2

2

或者,如果要使用别名进行过滤,则先将数据放入 CTE:

WITH cte_name AS (
     SELECT
      id, 
      created_at,
      extract(epoch from CURRENT_TIMESTAMP - created_at) as delta_sec
    FROM shop_order
)
SELECT *
    FROM cte_name
    WHERE delta_sec > 10000
于 2020-09-17T10:52:23.497 回答
1

只需重复表达式而不是使用其别名,例如:

select 
  id, 
  created_at,
  extract(epoch from CURRENT_TIMESTAMP - created_at)
from shop_order
where extract(epoch from CURRENT_TIMESTAMP - created_at) > 10000

如果您担心数据库会运行表达式两次并因此减慢您的查询速度:请放心,让 PostgreSQL 来处理它。

于 2020-09-17T10:23:15.577 回答