PostgreSQL Jsonb类型操作符

  1. ::双冒号表示类型转换
1
2
3
4
5
SELECT 1::INTEGER;
SELECT 1::VARCHAR;
SELECT '1'::INTEGER;
SELECT '1'::VARCHAR;
SELECT 'a'::INTEGER;
Operator Right Operand Type Description Example
@> jsonb Does the left JSON value contain within it the right value? '{"a":1, "b":2}'::jsonb @> '{"b":2}'::jsonb
<@ jsonb Is the left JSON value contained within the right value? '{"b":2}'::jsonb <@ '{"a":1, "b":2}'::jsonb
? text Does the key/element string exist within the JSON value? '{"a":1, "b":2}'::jsonb ? 'b'
`? ` text[] Do any of these key/element strings exist? `’{“a”:1, “b”:2, “c”:3}’::jsonb ? array[‘b’, ‘c’]`
?& text[] Do all of these key/element strings exist? '["a", "b"]'::jsonb ?& array['a', 'b']
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
SELECT '{"模型分类": ["人物", "道具"], "模型面数": ["低模"]}'::jsonb->'模型分类' @> '["人物","道具"]';
SELECT '{"模型分类": ["人物", "道具"], "模型面数": ["低模"]}'::jsonb->'模型分类' @> '["道具","人物"]';
SELECT '{"模型分类": ["人物", "道具"], "模型面数": ["低模"]}'::jsonb->'模型分类' @> '["人物"]';
SELECT '{"模型分类": ["人物", "道具"], "模型面数": ["低模"]}'::jsonb->'模型分类' @> '["道具"]';
SELECT '{"模型分类": ["人物", "道具"], "模型面数": ["低模"]}'::jsonb->'模型分类' @> '["道具", "不存在"]';

SELECT '{"模型分类": ["人物", "道具"], "模型面数": ["低模"]}'::jsonb->'模型分类' <@ '["人物","道具"]';
SELECT '{"模型分类": ["人物", "道具"], "模型面数": ["低模"]}'::jsonb->'模型分类' <@ '["道具","人物"]';
SELECT '{"模型分类": ["人物", "道具"], "模型面数": ["低模"]}'::jsonb->'模型分类' <@ '["人物"]';
SELECT '{"模型分类": ["人物", "道具"], "模型面数": ["低模"]}'::jsonb->'模型分类' <@ '["道具"]';
SELECT '{"模型分类": ["人物", "道具"], "模型面数": ["低模"]}'::jsonb->'模型分类' <@ '["道具", "不存在"]';

SELECT '{"模型分类": ["人物","道具"],"模型面数": ["低模"]}'::JSONB->'模型分类' ?| ARRAY['道具','不存在'];
SELECT '{"模型分类": ["人物","道具"],"模型面数": ["低模"]}'::JSONB->'模型分类' ?& ARRAY['道具','不存在'];

SELECT ARRAY['a', 'b'] @> ARRAY['a'];
SELECT ARRAY['a', 'b'] @> ARRAY['b'];
SELECT ARRAY['a', 'b'] @> ARRAY['b','c'];

SELECT ARRAY['a', 'b'] <@ ARRAY['a'];
SELECT ARRAY['a', 'b'] <@ ARRAY['b'];
SELECT ARRAY['a', 'b'] <@ ARRAY['b','c'];

SELECT ARRAY['a', 'b'] && ARRAY['a'];
SELECT ARRAY['a', 'b'] && ARRAY['b'];
SELECT ARRAY['a', 'b'] && ARRAY['b','c'];

参考资料:
9.15. JSON Functions and Operators
JSON Functions and Operators
8.14. JSON Types
Querying JSON in Postgres
PostgreSQL 9.4.4 中文手册
PostgreSQL 9.4.4 中文手册 章 8. 数据类型
Array Functions and Operators