我是PostgreSQL的新手,我有以下问题:
我有一个只有id-column和data-column的表,它使用jsonb-type。在jsonb-object里面我有一个datetime字段。我在各种帖子中读到,我应该使用ISO-8601日期格式存储在数据库中。
我想按日期过滤我的表:
SELECT * FROM table WHERE data->'date' > '2016-01-01T00:00'
这真的是用于此目的的最佳日期格式吗?
提前致谢:)
答案 0 :(得分:1)
该格式的一大优势是字符串顺序与日期顺序相对应,因此您在问题中引用的比较实际上可以按预期工作。
第二个优点是该格式的时间戳可以很容易地转换为PostgreSQL timestamp with time zone
值,因为类型输入函数可以理解这种格式。
我希望你不是在“在基督面前”处理日期,因为它不会那么容易与那些人一起工作。
答案 1 :(得分:0)
恕我直言您的查询应该生成
错误:运算符不存在:jsonb>带时区的时间戳
如果我做对了。如果您将->
更改为->>
,则应获取文本值而不是jsonb字段(也不能与时间戳相比)。
它应该像
SELECT * FROM table WHERE (data->>'date')::timestamptz > '2016-01-01T00:00'
工作