【发布时间】:2021-05-14 15:45:11
【问题描述】:
我对 PostgreSQL 非常缺乏经验,我试图让一行返回从当前日期时间到给定日期时间的间隔,将周、天、小时、分钟和秒分解为单独的列。
除了一个非常复杂的解决方案之外,我得到的最接近的是:
SELECT
(CURRENT_TIMESTAMP - '2021-01-01 00:00:00')::text AS str,
SUBSTRING((CURRENT_TIMESTAMP - '2021-01-01 00:00:00')::text FROM 1 FOR 2)::NUMERIC AS days,
SUBSTRING((CURRENT_TIMESTAMP - '2021-01-01 00:00:00')::text FROM 9 FOR 2)::NUMERIC AS hours,
SUBSTRING((CURRENT_TIMESTAMP - '2021-01-01 00:00:00')::text FROM 12 FOR 2)::NUMERIC AS minutes,
SUBSTRING((CURRENT_TIMESTAMP - '2021-01-01 00:00:00')::text FROM 15 FOR 2)::NUMERIC AS seconds
我的问题是:
- 此实现依赖于
X days子字符串中的字符数始终相同,但事实并非如此,那么如何使其更灵活? - 我可以将
(CURRENT_TIMESTAMP - '2021-01-01 00:00:00')::text的结果保存到一个简单的变量中,这样我就不必重复了吗? - 如何添加“周”列并获取
5 weeks, 5 days, ...而不是40 days?
我看过https://stackoverflow.com/a/56776697/2909854,但我不想几个月。
如果我可以将每个结果的输出保存到一个变量中,我可以像这样做一些相对干净的事情:https://stackoverflow.com/a/21323783/2909854
感谢任何帮助。谢谢!
【问题讨论】:
标签: sql postgresql intervals