SQL中->>->的区别是什么?

在这个线程(Check if field exists in json type column postgresql)中,回答者基本上建议使用,

json->'attribute' is not null

而不是

json->>'attribute' is not null

为什么使用单箭头而不是双箭头?根据我有限的经验,两者都做同样的事情.

推荐答案

->返回json(b),->>返回text:

with t (jo, ja) as (values
    ('{"a":"b"}'::jsonb,('[1,2]')::jsonb)
)
select
    pg_typeof(jo -> 'a'), pg_typeof(jo ->> 'a'),
    pg_typeof(ja -> 1), pg_typeof(ja ->> 1)
from t
;
 pg_typeof | pg_typeof | pg_typeof | pg_typeof 
-----------+-----------+-----------+-----------
 jsonb     | text      | jsonb     | text

Sql相关问答推荐

获取家谱树中第一次出现的特定信息,然后停止

Trino/Presto sq:仅当空值位于组中第一个非空值之后时,才用值替换空值

我希望以正确的升序获取SQL结果.怎样才能得到它们?

DBeaver将过程中的属性列表转换为字符串

数据库SQL-CTE命名空间(错误?)使用临时视图

如何根据几个条件 Select 值:如果满足一个范围的SUM,则对另一个范围求和

其中使用表名作为;行值;记录?

Snowflake 中的分层数据

在 PostgreSQL 中使用 ltree 列进行累积

如何创建snowflake表(动态查找数据类型)并从阶段加载(AWS S3)?

GRAFANA 数据库查询错误:pq:列名称不存在

SQL 语句将一列中的值与另一列中的不同值相加,同时按第三列进行分组?

获取所有用户的第一次和最后一次发货以及到达日期

在给定的日期范围内填写缺失的日期

SQL:如何从时间戳数据生成时间序列并计算不同事件类型的累计总和?

忽略与给定列匹配的行的 LAG 函数

Select 给定类别列表(或更多类别)中的所有事物

SELECT 用于 Parent、Children 和 ORDER BY [Order] 列

按 15 分钟递增计数分组,包括 0 计数

SQL Group By 然后映射出是否存在值