JSONB 字段和字符串键
JSONB fields and string keys
我有一个包含以下内容的 JSONB 列:
{"ibd":正确,"participant_id":"P016","sample_participant_id":"B1"}
如果我查询不带双引号的值,我会得到一个错误:
ERROR: invalid input syntax for type 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"'
它按预期工作。我不明白的是为什么我需要双引号。它们是实际值吗?
谢谢,
伊甸园
->
运算符在 jsonb
returns jsonb
上,因此您无法将 json 与字符串文字('B1'
) 或 text
类型。
WHERE sample_metadata.metadata->'sample_participant_id' = '"B1"'
之所以有效,是因为可以将元素 "B1"
隐式转换为 jsonb
以进行比较
您应该使用 ->>
运算符进行比较。它returnstext
WHERE metadata->>'sample_participant_id' = 'B1'
我有一个包含以下内容的 JSONB 列:
{"ibd":正确,"participant_id":"P016","sample_participant_id":"B1"}
如果我查询不带双引号的值,我会得到一个错误:
ERROR: invalid input syntax for type 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"'
它按预期工作。我不明白的是为什么我需要双引号。它们是实际值吗?
谢谢, 伊甸园
->
运算符在 jsonb
returns jsonb
上,因此您无法将 json 与字符串文字('B1'
) 或 text
类型。
WHERE sample_metadata.metadata->'sample_participant_id' = '"B1"'
之所以有效,是因为可以将元素 "B1"
隐式转换为 jsonb
以进行比较
您应该使用 ->>
运算符进行比较。它returnstext
WHERE metadata->>'sample_participant_id' = 'B1'