我有一个带有interval
列的表,类似这样。
CREATE TABLE validity (
window INTERVAL NOT NULL
);
假设存储的值是iso_8601
格式的“P3DT1H”。当我尝试读取该值时,它以常规的 postgres 格式出现。
3 days 01:00:00
但是我想要iso_8601
格式的值。我怎样才能实现它?
我有一个带有interval
列的表,类似这样。
CREATE TABLE validity (
window INTERVAL NOT NULL
);
假设存储的值是iso_8601
格式的“P3DT1H”。当我尝试读取该值时,它以常规的 postgres 格式出现。
3 days 01:00:00
但是我想要iso_8601
格式的值。我怎样才能实现它?
您可以使用SET intervalstyle
查询并将样式设置为iso_8601
. 然后,当您输出结果时,它们将采用 ISO 8601 格式。
_, err := s.db.Exec("SET intervalstyle='iso_8601'")
res, err := s.db.Query("select interval '1d1m'")
// res contains a row with P1DT1M
如果您正在寻找一种方法来更改intervalstyle
服务器级别的所有会话,您可以在配置文件中更新它:
-- connect to your psql using whatever client, e.g. cli and run
SHOW config_file;
-- in my case: /usr/local/var/postgres/postgresql.conf
编辑此文件并添加以下行:
intervalstyle = 'iso_8601'
在我的情况下,该文件已经有一个注释掉的行intervalstyle
,它的值为postgres
. 您应该更改它并重新启动服务。
这样你就不必每次运行查询时都从 golang 更改样式。