2015-09-04 29 views
0

我想使用date_trunc函数与从列中选择参数的特定时区。Postgres'date_trunc'功能与'在时区'

它的工作原理没有“在时间区”:

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 

它给了我'交易'或'附近的'语法错误''。

我试过用to_char把它转换成字符串,但没有运气。我该如何做这项工作?

+0

如果你想投你' created_at'字段,你必须这样写:'cast(transactions.created_at as timestamp)' – Houari

+0

@Houari我觉得这很愚蠢,那很简单。非常感谢你的帮助!你想写这个答案? – mountriv99

回答

0

如果你想投你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