比较函数
比较规则
下面的比较函数返回类型为 UInt8 的 0 或 1。只有同一组内的值可以进行比较(例如 UInt16 和 UInt64),不同组之间的值不能相互比较(例如 UInt16 和 DateTime)。
可以比较数字和字符串,也可以比较字符串与日期、日期与时间。
对于元组和数组,比较是按字典序进行的,这意味着会依次比较左侧和右侧元组/数组中对应位置的元素。
可以进行比较的类型包括:
- 数值和小数
- 字符串和定长字符串
- 日期
- 日期时间
- 元组(按字典序比较)
- 数组(按字典序比较)
字符串按字节逐个比较。如果某个字符串包含 UTF-8 编码的多字节字符,这可能会导致意外结果。 如果字符串 S1 以字符串 S2 为前缀,则认为 S1 比 S2 长。
equals
在 v1.1 中引入
比较两个值是否相等。
语法
参数
返回值
返回 UInt8 类型的值:如果 a 等于 b 则返回 1,否则返回 0。
示例
使用示例
globalIn
自 v1.1 起引入
与 in 相同,但在分布式查询中使用全局 Set 分发机制。该 Set 会被发送到所有远程服务器。
语法
参数
x— 要检查的值。 -set— 一组值的 Set。
返回值
如果 x 在 set 中则返回 1,否则返回 0。UInt8
示例
基本用法
globalInIgnoreSet
引入版本:v1.1
与 in 相同,但在分布式查询中使用全局 Set 分发。该 Set 会被发送到所有远程服务器。
这是 IgnoreSet 的变体,用于在不创建 Set 的情况下进行类型分析。
语法
参数
x— 要检查的值。-set— 值的 Set。
返回值
如果 x 在 Set 中则返回 1,否则返回 0。 UInt8
示例
基本用法
globalNotIn
引入版本:v1.1
与 notIn 相同,但在分布式查询中使用全局 Set 分发机制。该 Set 会被发送到所有远程服务器。
语法
参数
x— 要检查的值。set— Set 类型的值集合。
返回值
如果 x 不在该 Set 中,则返回 1,否则返回 0。UInt8
示例
基本用法
globalNotInIgnoreSet
引入版本:v1.1
与 notIn 相同,但在分布式查询中对 Set 使用全局分发机制。Set 会被发送到所有远程服务器。
这是用于类型分析且无需创建 Set 的 IgnoreSet 变体。
语法
参数
x— 要检查的值。 -set— 值的集合。
返回值
如果 x 不在该集合中,返回 1,否则返回 0。UInt8
示例
基本用法
globalNotNullIn
引入版本:v1.1
与 notNullIn 相同,但在分布式查询中使用全局 Set 进行分发。该 Set 会被发送到所有远程服务器。
语法
参数
x— 要检查的值。-set— 值的集合。
返回值
如果 x 不在该集合中,则返回 1,否则返回 0。UInt8
示例
基本用法
globalNotNullInIgnoreSet
引入版本:v1.1
与 notNullIn 相同,但在分布式查询中使用全局 Set 进行分发。该 Set 会被发送到所有远程服务器。
这是 IgnoreSet 的变体,用于在不创建 Set 的情况下进行类型分析。
语法
参数
x— 要检查的值。 -set— 值的 Set。
返回值
若 x 不在 Set 中,则返回 1,否则返回 0。UInt8
示例
基本用法
globalNullIn
引入版本:v1.1
与 nullIn 相同,但在分布式查询中使用全局 Set 分发。该 Set 会被发送到所有远程服务器。
语法
参数
x— 要检查的值。 -set— 值的 Set。
返回值
如果 x 在 Set 中,则返回 1,否则返回 0。UInt8
示例
基本用法
globalNullInIgnoreSet
引入于:v1.1
与 nullIn 相同,但在分布式查询中采用全局 Set 分发策略。该 Set 会被发送到所有远程服务器。
这是用于类型分析且无需实际创建 Set 的 IgnoreSet 变体。
语法
参数
x— 要检查的值。-set— 值的 Set。
返回值
如果 x 在 Set 中则返回 1,否则返回 0。UInt8
示例
基本用法
greater
自 v1.1 起引入
用于比较两个值是否满足大于关系。
语法
参数
返回值
如果 a 大于 b,则返回 1,否则返回 0,类型为 UInt8
示例
用法示例
greaterOrEquals
引入版本:v1.1
用于比较两个值是否具有大于或等于的关系。
语法
参数
返回值
如果 a 大于或等于 b,则返回 1,否则返回 0,返回类型为 UInt8
示例
使用示例
in
引入版本:v1.1
检查左操作数是否属于右操作数的 Set。若属于则返回 1,否则返回 0。左操作数中的 NULL 值会被忽略(视为不在该 Set 中)。
语法
参数
x— 要检查的值。 -set— 值的 Set 集合。
返回值
如果 x 在集合中则返回 1,否则返回 0。 UInt8
示例
基本用法
inIgnoreSet
引入于:v1.1
检查左操作数是否是右操作数 Set 的成员。如果是,则返回 1,否则返回 0。左操作数中的 NULL 值会被跳过(视为不在该 Set 中)。 这是用于类型分析且无需创建 Set 的 IgnoreSet 变体。
语法
参数
x— 要检查的值。 -set— 值的 Set(值的集合)。
返回值
如果 x 在该集合中则返回 1,否则返回 0。 UInt8
示例
基本用法
isDistinctFrom
引入版本:v25.11
对两个值执行 NULL 安全的“不等于”比较。
如果两个值彼此不同(不相等),则返回 true,包括当一个值为 NULL 而另一个不为 NULL 的情况。
如果两个值相等,或两者均为 NULL,则返回 false。
语法
参数
返回值
如果两个值不相同,则返回 true,并将 NULL 当作可比较的值处理:
- 如果 x != y,则返回
true。- 如果 x 或 y 中恰有一个为 NULL,则返回
true。 - 如果 x = y,或者 x 和 y 都为 NULL,则返回
false。Bool
- 如果 x 或 y 中恰有一个为 NULL,则返回
示例
包含数字和 NULL 的基本用法
isNotDistinctFrom
引入于:v25.10
对两个值执行空值安全的“相等”比较。
如果两个值相等,则返回 true,包括两者都为 NULL 的情况。
如果两个值不同,或者仅有一个为 NULL,则返回 false。
语法
参数
返回值
在将 NULL 视为可比较值的情况下,如果两个值相等,则返回 true:
- 如果 x = y,则返回
true。- 如果 x 和 y 都为 NULL,则返回
true。 - 如果 x != y,或者 x 和 y 中恰好有一个为 NULL,则返回
false。Bool
- 如果 x 和 y 都为 NULL,则返回
示例
针对数字和 NULL 的基本用法
less
在 v1.1 中引入
比较两个值是否满足“小于”关系。
语法
参数
返回值
如果 a 小于 b,则返回 1,否则返回 0,类型为 UInt8
示例
使用示例
lessOrEquals
自 v1.1 引入
判断两个值之间是否满足小于等于关系。
语法
参数
返回值
如果 a 小于或等于 b,则返回 1,否则返回 0,类型为 UInt8
示例
使用示例
notEquals
自 v1.1 起引入
用于比较两个值是否不相等。
语法
参数
返回值
如果 a 不等于 b,返回 1,否则返回 0。UInt8
示例
用法示例
notIn
引入版本:v1.1
检查左侧操作数是否 不 是右侧操作数 Set 的成员。如果不在该 Set 中则返回 1,否则返回 0。左侧操作数中的 NULL 值会被忽略。
语法
参数
x— 要检查的值。 -set— 值的 Set 集合。
返回值
如果 x 不在 Set 中,则返回 1,否则返回 0。UInt8
示例
基础用法
notInIgnoreSet
引入版本:v1.1
检查左操作数是否 不 是右操作数 Set 的成员。如果不在该 Set 中则返回 1,否则返回 0。左操作数中的 NULL 值会被跳过。 这是 IgnoreSet 的一种变体,用于在不创建 Set 的情况下进行类型分析。
语法
参数
x— 要检查的值。 -set— 值的集合。
返回值
如果 x 不在该集合中,则返回 1,否则返回 0。UInt8
示例
基本用法
notNullIn
引入版本:v1.1
检查左操作数是否 不是 右操作数 Set 的成员。与 notIn 不同,NULL 值不会被忽略:NULL 会与 Set 中的元素进行比较,且 NULL = NULL 的结果为 true。
语法
参数
x— 要检查的值。set— 值的 Set 集合。
返回值
如果 x 不在 Set 中,则返回 1;否则返回 0。UInt8
示例
基本用法
notNullInIgnoreSet
引入于:v1.1
检查左操作数是否 不 是右操作数集合的成员。与 notIn 不同,NULL 值不会被忽略:会将 NULL 与集合元素进行比较,且 NULL = NULL 的结果为 true。
这是 IgnoreSet 的变体,用于在不创建 Set 的情况下进行类型分析。
语法
参数
x— 要检查的值。set— 值的 Set。
返回值
如果 x 不在 set 中则返回 1,否则返回 0。UInt8
示例
基本用法
nullIn
自 v1.1 版本引入
检查左操作数是否是右操作数 Set 的成员。与 in 不同,NULL 值不会被跳过:会将 NULL 与 Set 中的元素进行比较,并且 NULL = NULL 的结果为 true。
语法
参数
x— 要检查的值。 -set— 值的 Set。
返回值
如果 x 在 Set 中则返回 1,否则返回 0。 UInt8
示例
基本用法
nullInIgnoreSet
引入版本:v1.1
检查左操作数是否是右操作数集合的成员。与 in 不同,NULL 值不会被跳过:NULL 会与集合元素进行比较,并且 NULL = NULL 的结果为 true。
这是 IgnoreSet 的一个变体,用于在不创建集合的情况下进行类型分析。
语法
参数
x— 要检查的值。 -set— 值的集合。
返回值
如果 x 在集合中,则返回 1;否则返回 0。UInt8
示例
基本用法