gpt4 book ai didi

SQL 'AT TIME ZONE',查询范围和 'SELECT' 所有列 (tablename.*) 表达式

转载 作者:行者123 更新时间:2023-11-29 11:36:49 25 4
gpt4 key购买 nike

我使用 timestamp(3) with time zone必要时在我的数据库中查找表,在我的情况下几乎都是这种情况。

我需要在比下面的查询复杂得多的查询中选择表的所有列。

我的问题是如何使用 SQL at time zone '<TIMEZONE>' 在所需时区获取时间戳(带时区)对于像 q.* 这样的选择表达式其中之一是时间戳(带时区)列。我可能有相同情况的子查询。是否有表达式可以在查询范围内实现此目的?

SELECT
q.*, -- created_at timestamp (with time zone) is already in here
q.created_at AT TIME ZONE 'EET', --instead of this redundant column selection
u.name AS author,
u.reputation,
CASE WHEN count(t.*)=0 THEN '[]' ELSE json_agg(t.*) END as tags
FROM posts q

-- authors
JOIN users u
ON q.author_id = u.id

-- tags
left join post_has_tag p_h_t
on q.id = p_h_t.post_id
left join tags t
on p_h_t.tag_id = t.id

WHERE q.post_type = 'question'
group by q.id, u.id;

最佳答案

如果您的列是 timestamp 类型,那么使用 AT TIME ZONE 是将它们转换为特定时区的正确方法。

但是,不要使用 EET。使用基于特定位置的时区 from this list ,例如 Europe/Bucharest - 或任何适用于您的内容。

或者,如果您的列的类型是timestamp with time zone,那么您可以设置 session 的时区,postgres 将为您进行转换:

SET TIME ZONE 'Europe/Bucharest'

您应该继续阅读 the docs了解这两种时间戳类型的区别。

关于SQL 'AT TIME ZONE',查询范围和 'SELECT' 所有列 (tablename.*) 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39211953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com