:: 是类型强制转换运算符,读作「强转为」,属于 PostgreSQL 原生语法,Hologres 完全兼容。
'{}'::jsonb
含义:把字符串字面量 '{}',强制转换成 jsonb 类型。
拆解
'{}':文本字符串,内容是一对大括号(空 json 对象),类型是text::jsonb:::强转,把 text → jsonb
最终结果:空 jsonb 对象
{}
其他常见例子
'123'::int --文本转整数
'3.14'::numeric --文本转小数
'2026-10-14'::date --文本转日期
'[]'::jsonb --字符串转空jsonb数组
和标准 SQL CAST 的等价关系
A::B 是简写,等价于 CAST(A AS B)
--简写(日常写Holo常用)
'{}'::jsonb
--完整标准写法
CAST('{}' AS jsonb)
两个完全一样,只是::写起来更短,Holo 开发普遍用这种。
注意 2 个坑
-
转换失败直接报错
'abc'::int -- 字符串abc无法转为数字,查询抛异常
-
和业务结合:
coalesce(r.tags, '{}'::jsonb)
- 如果
r.tags是 NULL,就替换成jsonb 类型的空对象; - 如果不写
::jsonb,直接写coalesce(r.tags, '{}'),会出现类型不一致(一边 jsonb,一边 text),SQL 编译报错。
补充区分
:::Postgres/Holo 专属简写强转CAST() AS:ANSI 标准 SQL,跨数据库通用(MySQL 不支持::,只能用 CAST)