当我想按日期过滤时,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'
上班
我是 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'
上班