Postgres 'date_trunc' 函数 'at time zone'

Postgres 'date_trunc' function with 'at time zone'

我正在尝试将 date_trunc 函数与特定时区一起使用,其中参数是从列中选择的。

它在没有 'at time zone' 的情况下工作:

SELECT (date_trunc('day', transactions.created_at))::DATE AS period_start FROM transactions LIMIT 1

当传入的参数是字符串时也有效:

SELECT (date_trunc('day', TIMESTAMP '2015-09-04 16:00:00' at time zone '+08:00'))::DATE AS period_start FROM transactions LIMIT 1

但是当我尝试将两者结合起来时:

SELECT (date_trunc('day', TIMESTAMP transactions.created_at at time zone '+08:00'))::DATE AS period_start FROM transactions LIMIT 1

它给了我一个'syntax error at or near "transactions"'。

我尝试使用 to_char 将其转换为字符串,但也没有成功。我怎样才能使这项工作?

如果你想投射你的created_at field,你必须这样写:

 CAST (transactions.created_at as timestamp)

所以你的最终查询应该是这样的:

SELECT (date_trunc('day', CAST (transactions.created_at as timestamp) at time zone '+08:00'))::DATE AS period_start 
FROM transactions LIMIT 1