当我想按日期过滤时,ISO8601 是 PostgreSQL jsonb 的最佳日期格式吗?

Is ISO8601 the best date-format for PostgreSQL jsonb when i want to filter by the date?

我是 PostgreSQL 的新手,我有以下问题:

我有一个 table,只有一个 id 列和一个数据列,它使用 jsonb 类型。在 jsonb-object 中,我有一个 datetime 字段。我在各种帖子中读到,我应该使用 ISO-8601 日期格式存储在数据库中。

我想像这样按日期过滤我的 table:

SELECT * FROM table WHERE data->'date' > '2016-01-01T00:00'

这真的是为此目的最好的日期格式吗?

提前致谢:)

该格式的一大优点是字符串顺序与日期顺序相对应,因此像您在问题中引用的那样的比较实际上会按预期工作。

第二个优点是该格式的时间戳可以很容易地转换为 PostgreSQL timestamp with time zone 值,因为类型输入函数理解这种格式。

我希望你不是在处理“基督之前”的日期,因为这些日期不太容易处理。

恕我直言,您的查询应该会产生

ERROR: operator does not exist: jsonb > timestamp with time zone

如果我做对了。如果您将 -> 更改为 ->>,它应该得到一个文本值而不是 jsonb 字段(这也不能与时间戳相比)。 它应该像

SELECT * FROM table WHERE (data->>'date')::timestamptz > '2016-01-01T00:00' 上班