我有一个JSONB专栏,内容如下:
{“ibd”:true,“参与者id”:“P016”,“示例参与者id”:“B1”}
如果我查询不带双引号的值,将得到一个错误:
错误:json类型的输入语法无效第1行:…ERE
sample_metadata.metadata->“sample_participant_id”=“B1”
致:

WHERE sample_metadata.metadata->'sample_participant_id' = 'B1'

但是为了
WHERE sample_metadata.metadata->'sample_participant_id' = '"B1"'

它按预期工作。我不明白为什么我需要双引号。它们是实际价值吗?
谢谢,
伊甸园

最佳答案

->运算符返回jsonb,因此不能将json与字符串文本(jsonb)或'B1'类型进行比较。

WHERE sample_metadata.metadata->'sample_participant_id' = '"B1"'

工作的原因是元素text可以隐式转换为"B1"进行比较
您应该使用jsonb运算符进行比较。它返回->>
WHERE metadata->>'sample_participant_id' = 'B1'

Demo

关于postgresql - JSONB字段和字符串键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54169925/

10-13 01:25