我有一个JSONB列,内容如下:
{“ ibd”:true,“ participant_id”:“ P016”,“ sample_participant_id”:“ B1”}
如果查询不带双引号的值,则会出现错误:
错误:类型json LINE 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"'
它按预期工作。我不明白的是为什么我需要双引号。它们是实际值吗?
谢谢, 伊甸园
答案 0 :(得分:2)
->
上的 jsonb
运算符返回jsonb
,因此您无法将json与字符串文字('B1'
)或text
类型进行比较。
WHERE sample_metadata.metadata->'sample_participant_id' = '"B1"'
之所以有效,是因为可以将元素"B1"
隐式转换为jsonb
进行比较
您应该使用->>
运算符进行比较。它返回text
WHERE metadata->>'sample_participant_id' = 'B1'