SELECT * FROM users WHERE data->>'name' = 'John';
SELECT data->>'name' AS name FROM users;
运算符 |
说明 |
示例 |
返回值 |
-> int |
获取数组元素 2 |
data->2 |
JSON |
-> text |
获取对象主键 name |
data->’name’ |
JSON |
#> text[] |
获取主键路径 a,b (如, data.a.b) |
data#>'{a,b}’ |
JSON |
->> int |
获取数组元 2 |
data->>2 |
Text |
->> text |
获取对象主键 name |
data->>’name’ |
Text |
#>> text[] |
获取主键将路径 a,b (如, data.a.b) |
data#>>'{a,b}’ |
Text |
> returns JSON(返回Json格式)
>> returns text (返回文本)
逻辑运算符
SELECT * FROM users WHERE data->tags ? 'admin';
SELECT data->tags ? 'admin' AS is_admin FROM users;
运算符 |
说明 |
示例 |
? str |
data 有主键 name吗? |
data ? ‘name’ |
?| text[] |
data 有 a 或 b吗? |
data ?| array[‘a’,’b’] |
?& text[] |
data 有 a 和 b吗? |
data ?& array[‘a’,’b’] |
@> jsonb |
是否为左包含? |
data @> ‘{“b”:2}’::jsonb |
<@ jsonb |
是否为有包含? |
data <@ ‘{“a”:1,”b”:2}’::jsonb |
注意,如果 ?/?|/?& 的运算目标是对象, 就会检查主键; 如果运算对象是数组, 会检查数组中的元素。
更新数组和对象
UPDATE users SET tags = tags || array['admin'];
运算符 |
示例 |
说明 |
|| json |
data || array[‘a’,’b’] |
拼接 |
– str |
data – ‘a’ |
删除主键 |
– int |
data – 1 |
删除数组的一个元素 |
#- text[] |
data #- ‘{us,name}’ |
删除路径 |
UPDATE users SET data = jsonb_set(data, '{name}', '"John"');
注意,以上方法在 PostgreSQL 9.5+有效。
与Json数据类型相关的函数
fn(json) → json
jsonb_set(data, '{path}', value)
jsonb_strip_nulls(data)
fn(···) → json
to_json("Hello"::text)
array_to_json('{1,2}'::int[])
Iteration
SELECT * from json_each('{"a":1, "b":2}')
SELECT * from json_each_text('{"a":1, "b":2}')
-- key | value
相关函数很多,详细内容可查看官方技术手册或官网。
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/73781
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!