比较规则
下面的比较函数返回 0 或 1,返回类型为 UInt8。只有同一组内的值才能进行比较
(例如 UInt16 和 UInt64) ,不能跨组比较 (例如 UInt16 和 DateTime) 。
数值和字符串之间可以比较,字符串也可以与日期比较,日期也可以与时间进行比较。
对于元组和数组,比较采用字典序,也就是说会依次比较左侧和右侧元组/数组中对应的各个
元素。
以下类型可以比较:
- 数值和十进制数
- 字符串和定长字符串
- 日期
- 带时间的日期
- 元组 (按字典序比较)
- 数组 (按字典序比较)
equals
首次引入版本:v1.1.0
比较两个值是否相等。
语法
equals(a, b)
-- a = b
-- a == b参数
返回值
如果 a 等于 b,则返回 1;否则返回 0。UInt8
示例
用法示例
SELECT 1 = 1, 1 = 2;┌─equals(1, 1)─┬─equals(1, 2)─┐
│ 1 │ 0 │
└──────────────┴──────────────┘globalIn
引入版本:v1.1.0
与 in 相同,但在分布式查询中使用全局集合分发。该集合会发送到所有远程服务器。
语法
globalIn(x, set)参数
x— 要检查的值。 -set— 值的集合。
返回值
如果 x 在该集合中,则返回 1;否则返回 0。UInt8
示例
基本用法
SELECT 1 IN (1, 2, 3)1globalInIgnoreSet
引入版本:v1.1.0
与 in 相同,但在分布式查询中使用全局集合分发机制。该集合会被发送到所有远程服务器。
这是 IgnoreSet Variant,用于在不创建集合的情况下进行类型分析。
语法
globalIn(x, set)参数
x— 要检查的值。 -set— 值集合。
返回值
如果 x 在集合中,则返回 1;否则返回 0。 UInt8
示例
基本用法
SELECT 1 IN (1, 2, 3)1globalNotIn
引入版本:v1.1.0
与 notIn 相同,但在分布式查询中使用全局集合分发机制。该集合会发送到所有远程服务器。
语法
globalNotIn(x, set)参数
x— 要检查的值。 -set— 值的集合。
返回值
如果 x 不在集合中,则返回 1,否则返回 0。UInt8
示例
基本用法
SELECT 4 NOT IN (1, 2, 3)1globalNotInIgnoreSet
引入版本:v1.1.0
与 notIn 相同,但在分布式查询中使用全局集合分发机制。该集合会被发送到所有远程服务器。
这是 IgnoreSet Variant,用于在不创建集合的情况下进行类型分析。
语法
globalNotIn(x, set)参数
x— 要检查的值。 -set— 值集合。
返回值
如果 x 不在该集合中,则返回 1,否则返回 0。UInt8
示例
基本用法
SELECT 4 NOT IN (1, 2, 3)1globalNotNullIn
引入版本:v1.1.0
与 notNullIn 相同,但在分布式查询中使用全局集合分发。该 Set 会发送到所有远程服务器。
语法
globalNotNullIn(x, set)参数
x— 要检查的值。 -set— 值的集合。
返回值
如果 x 不在该集合中,则返回 1;否则返回 0。UInt8
示例
基本用法
SELECT notNullIn(NULL, tuple(1, NULL))1globalNotNullInIgnoreSet
引入版本:v1.1.0
与 notNullIn 相同,但在分布式查询中使用全局集合分发。该集合会发送到所有远程服务器。
这是 IgnoreSet Variant,用于在不创建集合的情况下进行类型分析。
语法
globalNotNullIn(x, set)参数
x— 要检查的值。 -set— 值集合。
返回值
如果 x 不在该集合中,则返回 1;否则返回 0。 UInt8
示例
基本用法
SELECT notNullIn(NULL, tuple(1, NULL))1globalNullIn
引入版本:v1.1.0
与 nullIn 相同,但在分布式查询中使用全局集合分发。该集合会发送到所有远程服务器。
语法
globalNullIn(x, set)参数
x— 要检查的值。 -set— 值集合。
返回值
如果 x 在该集合中,则返回 1,否则返回 0。 UInt8
示例
基本用法
SELECT nullIn(NULL, tuple(1, NULL))0globalNullInIgnoreSet
引入版本:v1.1.0
与 nullIn 相同,但在分布式查询中使用全局集合分发。该集合会被发送到所有远程服务器。
这是用于类型分析且不会创建该集合的 IgnoreSet Variant。
语法
globalNullIn(x, set)参数
x— 要检查的值。 -set— 值的集合。
返回值
如果 x 在该集合中,返回 1;否则返回 0。UInt8
示例
基本用法
SELECT nullIn(NULL, tuple(1, NULL))0greater
引入版本:v1.1.0
比较两个值,判断前者是否大于后者。
语法
greater(a, b)
-- a > b参数
返回值
如果 a 大于 b,则返回 1;否则返回 0 UInt8
示例
使用示例
SELECT 2 > 1, 1 > 2;┌─greater(2, 1)─┬─greater(1, 2)─┐
│ 1 │ 0 │
└───────────────┴───────────────┘greaterOrEquals
引入版本:v1.1.0
比较两个值是否满足大于等于关系。
语法
greaterOrEquals(a, b)
-- a >= b参数
返回值
如果 a 大于或等于 b,则返回 1;否则返回 0。UInt8
示例
使用示例
SELECT 2 >= 1, 2 >= 2, 1 >= 2;┌─greaterOrEquals(2, 1)─┬─greaterOrEquals(2, 2)─┬─greaterOrEquals(1, 2)─┐
│ 1 │ 1 │ 0 │
└───────────────────────┴───────────────────────┴───────────────────────┘in
Introduced in: v1.1.0
检查左操作数是否属于右操作数 Set。若属于则返回 1,否则返回 0。左操作数中的 NULL 值会被跳过 (视为不在该集合中) 。
语法
in(x, set)参数
x— 要检查的值。 -set— 值的集合。
返回值
如果 x 在该集合中,则返回 1;否则返回 0。UInt8
示例
基本用法
SELECT 1 IN (1, 2, 3)1inIgnoreSet
Introduced in:v1.1.0
检查左操作数是否属于右操作数集合。如果属于,则返回 1,否则返回 0。左操作数中的 NULL 值会被跳过 (视为不在集合中) 。 这是 IgnoreSet 的一种Variant,用于类型分析且不会创建集合。
Syntax
in(x, set)参数
x— 要检查的值。 -set— 值的集合。
返回值
如果 x 在该集合中,则返回 1;否则返回 0。UInt8
示例
基本用法
SELECT 1 IN (1, 2, 3)1isDistinctFrom
引入版本:v25.11.0
对两个值执行 NULL 安全的“不等于”比较。
如果两个值不同 (即不相等) ,则返回 true,包括一个值为 NULL 而另一个值不为 NULL 的情况。
如果两个值相等,或两者均为 NULL,则返回 false。
语法
isDistinctFrom(x, y)参数
返回值
如果两个值不同,则返回 true,其中 NULL 也视为可比较值:
- 如果 x != y,则返回
true。- 如果 x 或 y 中恰好一个为 NULL,则返回
true。 - 如果 x = y,或者 x 和 y 都为 NULL,则返回
false。Bool
- 如果 x 或 y 中恰好一个为 NULL,则返回
示例
数字和 NULL 的基本用法
SELECT
isDistinctFrom(1, 2) AS result_1,
isDistinctFrom(1, 1) AS result_2,
isDistinctFrom(NULL, 1) AS result_3,
isDistinctFrom(NULL, NULL) AS result_4┌─result_1─┬─result_2─┬─result_3─┬─result_4─┐
│ 1 │ 0 │ 1 │ 0 │
└──────────┴──────────┴──────────┴──────────┘isNotDistinctFrom
引入版本:v23.8.0
对两个值执行 NULL 安全的“相等”比较。
如果两个值相等 (包括两者都为 NULL 的情况) ,则返回 true。
如果两个值不同,或其中恰好一个为 NULL,则返回 false。
语法
isNotDistinctFrom(x, y)参数
返回值
如果两个值相等,则返回 true;NULL 也会被视为可比较值:
- 如果 x = y,则返回
true。- 如果 x 和 y 均为 NULL,则返回
true。 - 如果 x != y,或者 x 和 y 中恰好有一个为 NULL,则返回
false。Bool
- 如果 x 和 y 均为 NULL,则返回
示例
数字和 NULL 的基本用法
SELECT
isNotDistinctFrom(1, 1) AS result_1,
isNotDistinctFrom(1, 2) AS result_2,
isNotDistinctFrom(NULL, NULL) AS result_3,
isNotDistinctFrom(NULL, 1) AS result_4┌─result_1─┬─result_2─┬─result_3─┬─result_4─┐
│ 1 │ 0 │ 1 │ 0 │
└──────────┴──────────┴──────────┴──────────┘less
引入版本:v1.1.0
比较两个值,判断是否为小于关系。
语法
less(a, b)
-- a < b参数
返回值
若 a 小于 b,则返回 1;否则返回 0 UInt8
示例
使用示例
SELECT 1 < 2, 2 < 1;┌─less(1, 2)─┬─less(2, 1)─┐
│ 1 │ 0 │
└────────────┴────────────┘lessOrEquals
Introduced in: v1.1.0
比较两个值是否满足小于或等于关系。
语法
lessOrEquals(a, b)
-- a <= b参数
返回值
如果 a 小于或等于 b,则返回 1;否则返回 0。UInt8
示例
使用示例
SELECT 1 <= 2, 2 <= 2, 3 <= 2;┌─lessOrEquals(1, 2)─┬─lessOrEquals(2, 2)─┬─lessOrEquals(3, 2)─┐
│ 1 │ 1 │ 0 │
└────────────────────┴────────────────────┴────────────────────┘notEquals
引入版本:v1.1.0
比较两个值是否不相等。
语法
notEquals(a, b)
-- a != b
-- a <> b参数
返回值
如果 a 不等于 b,返回 1;否则返回 0。UInt8
示例
使用示例
SELECT 1 != 2, 1 != 1;┌─notEquals(1, 2)─┬─notEquals(1, 1)─┐
│ 1 │ 0 │
└─────────────────┴─────────────────┘notIn
引入版本:v1.1.0
检查左操作数是否不属于右操作数集合。如果不在集合中,则返回 1,否则返回 0。左操作数中的 NULL 值会被跳过。
语法
notIn(x, set)参数
x— 要检查的值。 -set— 值集合。
返回值
如果 x 不在该集合中,则返回 1,否则返回 0。UInt8
示例
基本用法
SELECT 4 NOT IN (1, 2, 3)1notInIgnoreSet
引入版本:v1.1.0
检查左操作数是否不属于右操作数集合。若不在集合中,则返回 1,否则返回 0。左操作数中的 NULL 值会被跳过。 这是 IgnoreSet Variant,用于在不创建集合的情况下进行类型分析。
语法
notIn(x, set)参数
x— 要检查的值。 -set— 值集合。
返回值
如果 x 不在该集合中,则返回 1;否则返回 0。 UInt8
示例
基本用法
SELECT 4 NOT IN (1, 2, 3)1notNullIn
首次引入版本:v1.1.0
检查左操作数是否不属于右操作数集合。与 notIn 不同,NULL 值不会被跳过:NULL 会与集合元素进行比较,且 NULL = NULL 的结果为 true。
语法
notNullIn(x, set)参数
x— 待检查的值。 -set— 值的集合。
返回值
如果 x 不在集合中,则返回 1;否则返回 0。UInt8
示例
基本用法
SELECT notNullIn(NULL, tuple(1, NULL))1notNullInIgnoreSet
引入版本:v1.1.0
检查左操作数是否不在右操作数集合中。与 notIn 不同,NULL 值不会被跳过:NULL 会与集合中的元素进行比较,并且 NULL = NULL 的结果为 true。
这是 IgnoreSet Variant,用于类型分析,且不会创建集合。
语法
notNullIn(x, set)参数
x— 要检查的值。 -set— 值集合。
返回值
如果 x 不在该集合中,则返回 1;否则返回 0。 UInt8
示例
基本用法
SELECT notNullIn(NULL, tuple(1, NULL))1nullIn
引入版本:v1.1.0
检查左操作数是否属于右操作数集合。与 in 不同,NULL 值不会被跳过:NULL 会与集合元素进行比较,且 NULL = NULL 的结果为 true。
语法
nullIn(x, set)参数
x— 要检查的值。 -set— 值的集合。
返回值
如果 x 在集合中,则返回 1;否则返回 0。UInt8
示例
基本用法
SELECT nullIn(NULL, tuple(1, NULL))0nullInIgnoreSet
引入版本:v1.1.0
检查左操作数是否属于右操作数集合。与 in 不同,NULL 值不会被跳过:NULL 会与集合中的元素进行比较,且 NULL = NULL 的结果为 true。
这是 IgnoreSet Variant,用于在不创建集合的情况下进行类型分析。
语法
nullIn(x, set)参数
x— 要检查的值。 -set— 一组值。
返回值
如果 x 在该集合中,则返回 1,否则返回 0。UInt8
示例
基本用法
SELECT nullIn(NULL, tuple(1, NULL))0