gpt4 book ai didi

postgresql - 从两个时间戳创建 PostgreSQL `tsrange`

转载 作者:行者123 更新时间:2023-11-29 11:42:56 24 4
gpt4 key购买 nike

我正在尝试在 postgresql 查询中创建一个 tsrange(上周四到上周四),但出现转换错误。

这是我到目前为止所得到的(从 this SO question 开始)。

WITH past_week AS (
SELECT date_trunc('day', NOW() + (s::TEXT || ' day')::INTERVAL)::TIMESTAMP(0) AS day
FROM generate_series(-7, 0, 1) AS s)
SELECT (
date_trunc('day', (SELECT day FROM past_week WHERE EXTRACT(DOW FROM day) = '4') - '7 day'::INTERVAL),
date_trunc('day', (SELECT day FROM past_week WHERE EXTRACT(DOW FROM day) = '4')));

这是结果(正确的值,但不是格式,因为它不是一个范围):

                      row                      
-----------------------------------------------
("2015-10-29 00:00:00","2015-11-05 00:00:00")
(1 row)

现在,有两个主要问题困扰着我:

  1. 如果我尝试在查询结束前添加一个 ::tsrange,解释器会提示:

    错误:无法将类型记录转换为 tsrange第 6 行:...ROM past_week WHERE EXTRACT(DOW FROM day) = '4')))::tsrange;

  2. 我很想避免重复,但我对 SQL 不是很精通,不知道该怎么做。我们非常欢迎任何改进。

最佳答案

使用tsrange() constructor :

WITH past_week AS (
SELECT date_trunc('day', NOW() + (s::TEXT || ' day')::INTERVAL)::TIMESTAMP(0) AS day
FROM generate_series(-7, 0, 1) AS s)
SELECT tsrange(
date_trunc('day',
(SELECT day FROM past_week
WHERE EXTRACT(DOW FROM day) = '4') - '7 day'::INTERVAL),
date_trunc('day',
(SELECT day FROM past_week
WHERE EXTRACT(DOW FROM day) = '4')));

tsrange
-----------------------------------------------
["2015-10-29 00:00:00","2015-11-05 00:00:00")
(1 row)

使用 CURRENT_DATE您的查询可能很简单:

WITH previous_thursday AS (
SELECT CURRENT_DATE- EXTRACT(DOW FROM CURRENT_DATE)::int+ 4 AS thursday
)
SELECT tsrange(thursday- '7d'::INTERVAL, thursday)
FROM previous_thursday;

关于postgresql - 从两个时间戳创建 PostgreSQL `tsrange`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33566087/

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