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
我正在尝试将 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