postgresql Postgres将带有时区的时间戳转换为日期

jslywgbw  于 2023-08-04  发布在  PostgreSQL
关注(0)|答案(2)|浏览(149)

我有一个postgres数据库,其中存储了一些会计数据。记帐数据具有时间戳(带时区)。
我想按日期汇总/分组会计数据。但是日期应该是用户/请求的时区,而不是UTC。

SELECT '2023-08-01'::timestamp AT TIME ZONE 'Europe/Berlin'; -- 2023-07-31 22:00:00+00

字符串
输出时间戳的正确UTC值,
但如果我将其转换为date,它将返回UTC日期:

SELECT date('2023-08-01'::timestamp AT TIME ZONE 'Europe/Berlin'); -- 2023-07-31


是否有方法以欧洲/柏林时间输出日期?(2023-08-01

fcy6dtqo

fcy6dtqo1#

给定一个timestamp with time zone,您可以通过以下命令获得当时德国的当前日期

SELECT date(current_timestamp AT TIME ZONE 'Europe/Berlin');

字符串
您的示例使用了timestamp without time zone,这可能就是问题所在。

qyyhg6bp

qyyhg6bp2#

你可以这样做

SELECT (timestamp '2023-08-01' AT TIME ZONE 'Europe/Berlin')::date;

To apply it on your accounting data, use this

    SELECT
        (myTimeStampColumnName AT TIME ZONE 'Europe/Berlin')::date
        FROM
        my_accounting_table_name;

Please change `myTimeStampColumnName` with your actual Attribute Name holding the `TimeStamp` data and `my_accounting_table_name` with the actual Table Name of the parent `myTimeStampColumnName`.

字符串
要进行分组/求和,请使用以下方法

SELECT
    (myTimeStampColumnName AT TIME ZONE 'Europe/Berlin')::date AS europe_berlin_date,
    SUM(amount) AS total_amount
FROM
    my_accounting_table_name
GROUP BY
    (myTimeStampColumnName AT TIME ZONE 'Europe/Berlin')::date;


希望这就是你正在寻找的。

相关问题