处理 Nullable 值的函数
isNull
返回参数是否为 NULL。
另见运算符 IS NULL
。
语法
别名:ISNULL
。
参数
x
— 非复合数据类型的值。
返回值
- 如果
x
为NULL
,则返回1
。 - 如果
x
不为NULL
,则返回0
。
示例
表格:
查询:
结果:
isNullable
如果列为 Nullable(即允许 NULL
值),则返回 1
,否则返回 0
。
语法
参数
x
— 列。
返回值
示例
查询:
结果:
isNotNull
返回参数是否不为 NULL。
另见运算符 IS NOT NULL
。
参数:
x
— 非复合数据类型的值。
返回值
- 如果
x
不为NULL
,则返回1
。 - 如果
x
为NULL
,则返回0
。
示例
表格:
查询:
结果:
isNotDistinctFrom
执行 null 安全比较。用于比较 JOIN ON 部分包含 NULL 值的 JOIN 键。
该函数会将两个 NULL
值视为相同,返回 true
,这与通常的相等行为不同,后者比较两个 NULL
值时会返回 NULL
。
该函数是 JOIN ON 实现使用的内部函数。请勿在查询中手动使用。
语法
参数
x
— 第一个 JOIN 键。y
— 第二个 JOIN 键。
返回值
- 当
x
和y
都为NULL
时返回true
。 - 否则返回
false
。
示例
完整示例见: JOIN 键中的 NULL 值。
isZeroOrNull
返回参数是否为 0(零)或 NULL。
参数:
x
— 非复合数据类型的值。
返回值
- 如果
x
为 0(零)或NULL
,则返回1
。 - 否则返回
0
。
示例
表格:
查询:
结果:
coalesce
返回最左侧的非 NULL
参数。
参数:
- 任意数量的非复合类型参数。所有参数必须为相互兼容的数据类型。
返回值
- 第一个非
NULL
参数 - 如果所有参数均为
NULL
,则返回NULL
。
示例
考虑一组联系人,可以指定多种联系客户的方式。
mail
和 phone
字段为 String 类型,但 telegram
字段为 UInt32
类型,因此需要转换为 String。
从联系人列表中获取客户的第一个可用联系方法:
ifNull
如果参数为 NULL
,则返回替代值。
参数:
x
— 要检查是否为NULL
的值。alt
— 如果x
为NULL
,函数返回的值。
返回值
- 如果
x
不为NULL
,则返回x
。 - 如果
x
为NULL
,则返回alt
。
示例
查询:
结果:
查询:
结果:
nullIf
如果两个参数相等,则返回 NULL
。
参数:
x
,y
— 要比较的值。必须为兼容类型。
返回值
- 如果参数相等,则返回
NULL
。 - 如果参数不相等,则返回
x
。
示例
查询:
结果:
查询:
结果:
assumeNotNull
返回对应的非 Nullable
值,适用于 Nullable 类型的值。如果原始值为 NULL
,则可以返回任意结果。另见函数 ifNull
和 coalesce
。
参数:
x
— 原始值。
返回值
- 如果输入值不为
NULL
,则以非Nullable
类型返回输入值。 - 如果输入值为
NULL
,则返回任意值。
示例
表格:
查询:
结果:
查询:
结果:
toNullable
将参数类型转换为 Nullable
。
参数:
x
— 非复合类型的值。
返回值
- 输入值,但为
Nullable
类型。
示例
查询:
结果:
查询:
结果: