jsonb操作符
-
@>
判断某个jsonb类型的字段中是否包含某个值
例:where data_json @> {"name":"tag","value":"val1"}
-
->
通过key获取json或jsonb中的元素,返回值是json或jsonb-
json由数组格式构成
'[{"key1":"val1","key2":"val2"},{"key3":"val3"}]'
sql
data_json -> 1
会得到{"key3":"val3"}
-
json由非数组格式构成
{“key1”:“val1”, “key2”:“val2”}
sql
data_json -> 'key1'
会得到val1
例如:select * from table1 where data_json ->> 'key1' like '%va%'
-
-
->>
通过key获取json或jsonb中的元素,并转换成字符串,返回值是文本,其他同->
例如: -
#>
获取json子元素,返回json -
#>>
获取json子元素,返回文本
jsonb操作函数
https://www.postgresql.org/docs/9.4/functions-json.html
案例
将表中json类型的字段中的指定key对应的value值更新为同记录的其他字段的值
-- 将table_a表中的data_json字段(jsonb类型)中 key为address对应的value值更新为 other_column 字段的值
update table_a
set data_json = data_json || concat('{"address"":', "other_column", '"}')::jsonb where <condition>;
更新前
other_column(varchar) | data_json(jsonb) |
---|---|
航海路 | {“address”:“北京路”, “mobile”:“111111111”, “num”:89} |
更新后
other_column(varchar) | data_json(jsonb) |
---|---|
航海路 | {“address”:“航海路", “mobile”:“111111111”, “num”:89} |