以下查询
SELECT the_date FROM date_trunc('day', timestamp with time zone
'2001-01-1 00:00:00+0100') as the_date
结果
the_date
2000-12-31 00:00
有没有办法告诉date_trunc根据它所用的时区进行日/月/年转换?
预期的产出将是:2001-01-1 00:00+0100
您需要指定要在其中显示的时区
select
date_trunc(
'day',
timestamp with time zone '2001-01-1 00:00:00+0100' at time zone '-02'
) as the_date;
the_date
---------------------
2001-01-01 00:00:00
虽然明确的答案可能对于OP的奇怪情况是正确的,但对其他人来说更可能是不正确的。您需要将date_trunc返回的时间戳转换为适当的时区。
select
date_trunc(
'day',
some_timestamp at time zone users_timezone
) at time zone users_timezone as the_date;
重要的是要了解date_trunc
返回一个timestamp
没有附加时区。您需要将时间戳转换为适当的时区,因为数据库客户端或下游的任何时区可能具有不同的时区。