SQL中的->>
和->
有什么区别?
在这个线程(Check if field exists in json type column postgresql)中,回答者基本上建议使用,
json->'attribute' is not null
作为替代,
json->>'attribute' is not null
为什么用单箭头而不是双箭头?以我有限的经验,两者都做同样的事情。
SQL中的->>
和->
有什么区别?
在这个线程(Check if field exists in json type column postgresql)中,回答者基本上建议使用,
json->'attribute' is not null
作为替代,
json->>'attribute' is not null
为什么用单箭头而不是双箭头?以我有限的经验,两者都做同样的事情。
4条答案
按热度按时间aamkag611#
->
返回json(或jsonb),->>
返回text
:pexxcrt22#
PostgreSQL提供了两个原生运算符
->
和->>
来帮助您查询JSON数据。运算符
->
将JSON对象字段返回为JSON。运算符->>
将JSON对象字段返回为文本。以下查询使用运算符
->
以JSON格式获取所有客户:下面的查询使用运算符
->>
以文本的形式获取所有客户:一个二个一个一个
您可以在下面的链接中查看更多详细信息http://www.postgresqltutorial.com/postgresql-json/
qv7cva1a3#
Postgres提供了2个操作符来获取JSON成员:
->
返回JSON或JSONB类型->>
返回类型文本我们还必须明白,我们现在有两种不同的null:
****(null)***postgres null类型
*nulljson/B null类型
我在jsfiddle上创建了一个示例
让我们创建一个带有JSONB字段的简单表:
并插入一些测试数据:
我们在sqlfiddle中看到的输出:
备注:
1.包含JSONB对象,唯一的字段
member
为null1.包含一个JSONB对象,唯一的字段
member
具有数值12
1.为***(null)***:即整个列为***(null)***,并且根本不包含JSONB对象
为了更好地理解差异,让我们看看类型和空值检查:
输出:
| 身份证|箭|箭头pg型|arrow_is_null|dbl_arrow|dbl_arrow_pg_type|dbl_arrow_is_null|是_json_空|
| --------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------|
| 1|零|JSONB|假的|(无)|正文|真|真|
| 第二章|十二岁|JSONB|假的|十二岁|正文|假的|假的|
| 三|(无)|JSONB|真|(无)|正文|真|假的|
备注:
{"member": null}
:val -> 'member' IS NULL
为falseval ->> 'member' IS NULL
为真is_json_null
可以用来获取onlyjson-null条件c9qzyr3d4#
这里已经回答过几次了,单箭头
->
用于直接访问JSON。双箭头->>
用于访问 * 和 * 转换。记住这一点的关键是:
*
->
短箭头表示工作量更少:它只做一件事一箭一物:访问JSON***
->>
**长箭头表示你需要输入更多的内容,postgres需要做更多的工作:两个箭头,两件事:访问JSON并将其转换为文本