Postgres 演员 | 将间隔转换为 iso_8601 格式

Mat*_*lva 3 php postgresql datetime iso8601

在 pg 中,月份可以是 'mon' 或 'month',在 php 中,'mon' 表示星期一。

myinterval 是数据库上的间隔列。

如何使pg输出

`SELECT myinterval FROM table` = 1 year 6 mons
Run Code Online (Sandbox Code Playgroud)

`SELECT myinterval FROM table` = P1Y6M
Run Code Online (Sandbox Code Playgroud)

我读过,intervalstyle但我正在使用现有代码,因此我不能弄乱某些行,使用 IntervalStyle 它将在整个会话中发生变化

jen*_*101 5

很抱歉这么晚才回答这个问题,但我刚刚在我的遗留代码库中遇到了同样的问题。我通过使用事务并设置事务持续时间的间隔样式解决了这个问题:

BEGIN;

SET LOCAL intervalstyle = 'iso_8601';
SELECT (INTERVAL '6 years 5 months 4 days 3 hours 2 minutes 1 second')::text;

COMMIT;
Run Code Online (Sandbox Code Playgroud)

这输出P6Y5M4DT3H2M1S

如果我之后直接运行:

SELECT (INTERVAL '6 years 5 months 4 days 3 hours 2 minutes 1 second')::text;
Run Code Online (Sandbox Code Playgroud)

然后我得到6 years 5 mons 4 days 03:02:01

因此,会话的间隔样式不受影响。