在 PostgreSQL 中存储 ISO 8601 持续时间

frm*_*elz 4 postgresql duration iso8601 intervals setinterval

需要P[n]Y[n]M[n]DT[n]H[n]M[n]S在 PostgreSQL 中以 ISO 8601 格式存储持续时间,然后以相同格式在脚本中检索它。在 PostgreSQL 中存储 ISO 8601 持续时间的数据类型是什么?

frm*_*elz 6

谷歌搜索显示,有些人将 ISO 8601 持续时间存储为VARCHAR. PostgreSQL 虽然在其他日期/时间类型中有一个interval数据类型,它可以以iso_8601格式存储和返回持续时间。例如,

CREATE TABLE xyz(
  id SERIAL PRIMARY KEY,
  duration INTERVAL
);
Run Code Online (Sandbox Code Playgroud)

ISO 8601 格式的持续时间

# SELECT duration FROM xyz;
 duration
----------
 PT0S
 PT1M28S
(2 rows)
Run Code Online (Sandbox Code Playgroud)

的输出样式interval可以通过SET intervalstyle命令设置

SET intervalstyle = 'iso_8601';
Run Code Online (Sandbox Code Playgroud)