跳转到主要内容

比较规则

下面的比较函数返回 01,返回类型为 UInt8。只有同一组内的值才能进行比较 (例如 UInt16UInt64) ,不能跨组比较 (例如 UInt16DateTime) 。 数值和字符串之间可以比较,字符串也可以与日期比较,日期也可以与时间进行比较。 对于元组和数组,比较采用字典序,也就是说会依次比较左侧和右侧元组/数组中对应的各个 元素。 以下类型可以比较:
  • 数值和十进制数
  • 字符串和定长字符串
  • 日期
  • 带时间的日期
  • 元组 (按字典序比较)
  • 数组 (按字典序比较)
字符串按字节逐个比较。如果其中一个字符串包含 UTF-8 编码的多字节字符,可能会产生不符合预期的结果。 如果字符串 S1 以另一个字符串 S2 作为前缀,则认为 S1 比 S2 长。

equals

首次引入版本:v1.1.0 比较两个值是否相等。 语法
equals(a, b)
        -- a = b
        -- a == b
参数
  • a — 第一个值。* - b — 第二个值。*
返回值 如果 a 等于 b,则返回 1;否则返回 0UInt8 示例 用法示例
Query
SELECT 1 = 1, 1 = 2;
Response
┌─equals(1, 1)─┬─equals(1, 2)─┐
│            1 │            0 │
└──────────────┴──────────────┘

globalIn

引入版本:v1.1.0 in 相同,但在分布式查询中使用全局集合分发。该集合会发送到所有远程服务器。 语法
globalIn(x, set)
参数
  • x — 要检查的值。 - set — 值的集合。
返回值 如果 x 在该集合中,则返回 1;否则返回 0。UInt8 示例 基本用法
Query
SELECT 1 IN (1, 2, 3)
Response
1

globalInIgnoreSet

引入版本:v1.1.0 in 相同,但在分布式查询中使用全局集合分发机制。该集合会被发送到所有远程服务器。 这是 IgnoreSet Variant,用于在不创建集合的情况下进行类型分析。 语法
globalIn(x, set)
参数
  • x — 要检查的值。 - set — 值集合。
返回值 如果 x 在集合中,则返回 1;否则返回 0。 UInt8 示例 基本用法
Query
SELECT 1 IN (1, 2, 3)
Response
1

globalNotIn

引入版本:v1.1.0 notIn 相同,但在分布式查询中使用全局集合分发机制。该集合会发送到所有远程服务器。 语法
globalNotIn(x, set)
参数
  • x — 要检查的值。 - set — 值的集合。
返回值 如果 x 不在集合中,则返回 1,否则返回 0。UInt8 示例 基本用法
Query
SELECT 4 NOT IN (1, 2, 3)
Response
1

globalNotInIgnoreSet

引入版本:v1.1.0 notIn 相同,但在分布式查询中使用全局集合分发机制。该集合会被发送到所有远程服务器。 这是 IgnoreSet Variant,用于在不创建集合的情况下进行类型分析。 语法
globalNotIn(x, set)
参数
  • x — 要检查的值。 - set — 值集合。
返回值 如果 x 不在该集合中,则返回 1,否则返回 0。UInt8 示例 基本用法
Query
SELECT 4 NOT IN (1, 2, 3)
Response
1

globalNotNullIn

引入版本:v1.1.0 notNullIn 相同,但在分布式查询中使用全局集合分发机制。该 Set 会发送到所有远程服务器。 语法
globalNotNullIn(x, set)
参数
  • x — 要检查的值。 - set — 值的集合。
返回值 如果 x 不在该集合中,则返回 1;否则返回 0。UInt8 示例 基本用法
Query
SELECT notNullIn(NULL, tuple(1, NULL))
Response
0

globalNotNullInIgnoreSet

引入版本:v1.1.0 notNullIn 相同,但在分布式查询中使用全局集合分发机制。该集合会发送到所有远程服务器。 这是 IgnoreSet Variant,用于在不创建集合的情况下进行类型分析。 语法
globalNotNullIn(x, set)
参数
  • x — 要检查的值。 - set — 值集合。
返回值 如果 x 不在该集合中,则返回 1;否则返回 0。 UInt8 示例 基本用法
Query
SELECT notNullIn(NULL, tuple(1, NULL))
Response
0

globalNullIn

引入版本:v1.1.0 nullIn 相同,但在分布式查询中使用全局集合分发机制。该集合会发送到所有远程服务器。 语法
globalNullIn(x, set)
参数
  • x — 要检查的值。 - set — 值集合。
返回值 如果 x 在该集合中,则返回 1,否则返回 0。 UInt8 示例 基本用法
Query
SELECT nullIn(NULL, tuple(1, NULL))
Response
1

globalNullInIgnoreSet

引入版本:v1.1.0 nullIn 相同,但在分布式查询中使用全局集合分发。该集合会被发送到所有远程服务器。 这是用于类型分析且不会创建该集合的 IgnoreSet Variant。 语法
globalNullIn(x, set)
参数
  • x — 要检查的值。 - set — 值的集合。
返回值 如果 x 在该集合中,返回 1;否则返回 0。UInt8 示例 基本用法
Query
SELECT nullIn(NULL, tuple(1, NULL))
Response
1

greater

引入版本:v1.1.0 比较两个值,判断前者是否大于后者。 语法
greater(a, b)
    -- a > b
参数
  • a — 第一个值。* - b — 第二个值。*
返回值 如果 a 大于 b,则返回 1;否则返回 0 UInt8 示例 使用示例
Query
SELECT 2 > 1, 1 > 2;
Response
┌─greater(2, 1)─┬─greater(1, 2)─┐
│             1 │             0 │
└───────────────┴───────────────┘

greaterOrEquals

引入版本:v1.1.0 比较两个值是否满足大于等于关系。 语法
greaterOrEquals(a, b)
    -- a >= b
参数
  • a — 第一个值。* - b — 第二个值。*
返回值 如果 a 大于或等于 b,则返回 1;否则返回 0UInt8 示例 使用示例
Query
SELECT 2 >= 1, 2 >= 2, 1 >= 2;
Response
┌─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 示例 基本用法
Query
SELECT 1 IN (1, 2, 3)
Response
1

inIgnoreSet

Introduced in:v1.1.0 检查左操作数是否属于右操作数集合。如果属于,则返回 1,否则返回 0。左操作数中的 NULL 值会被跳过 (视为不在集合中) 。 这是 IgnoreSet 的一种Variant,用于类型分析且不会创建集合。 Syntax
in(x, set)
参数
  • x — 要检查的值。 - set — 值的集合。
返回值 如果 x 在该集合中,则返回 1;否则返回 0。UInt8 示例 基本用法
Query
SELECT 1 IN (1, 2, 3)
Response
1

isDistinctFrom

引入版本:v25.11.0 对两个值执行 NULL 安全的“不等于”比较。 如果两个值不同 (即不相等) ,则返回 true,包括一个值为 NULL 而另一个值不为 NULL 的情况。 如果两个值相等,或两者均为 NULL,则返回 false 语法
isDistinctFrom(x, y)
参数
  • x — 要比较的第一个值。可以是任意 ClickHouse 数据类型。Any
  • y — 要比较的第二个值。可以是任意 ClickHouse 数据类型。Any
返回值 如果两个值不同,则返回 true,其中 NULL 也视为可比较值:
  • 如果 x != y,则返回 true
    • 如果 x 或 y 中恰好一个为 NULL,则返回 true
    • 如果 x = y,或者 x 和 y 都为 NULL,则返回 falseBool
示例 数字和 NULL 的基本用法
Query
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
Response
┌─result_1─┬─result_2─┬─result_3─┬─result_4─┐
│        1 │        0 │        1 │        0 │
└──────────┴──────────┴──────────┴──────────┘

isNotDistinctFrom

引入版本:v23.8.0 对两个值执行 NULL 安全的“相等”比较。 如果两个值相等 (包括两者都为 NULL 的情况) ,则返回 true。 如果两个值不同,或其中恰好一个为 NULL,则返回 false 语法
isNotDistinctFrom(x, y)
参数
  • x — 要比较的第一个值。可以是任意 ClickHouse 数据类型。Any
  • y — 要比较的第二个值。可以是任意 ClickHouse 数据类型。Any
返回值 如果两个值相等,则返回 true;NULL 也会被视为可比较值:
  • 如果 x = y,则返回 true
    • 如果 x 和 y 均为 NULL,则返回 true
    • 如果 x != y,或者 x 和 y 中恰好有一个为 NULL,则返回 falseBool
示例 数字和 NULL 的基本用法
Query
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
Response
┌─result_1─┬─result_2─┬─result_3─┬─result_4─┐
│        1 │        0 │        1 │        0 │
└──────────┴──────────┴──────────┴──────────┘

less

引入版本:v1.1.0 比较两个值,判断是否为小于关系。 语法
less(a, b)
    -- a < b
参数
  • a — 第一个值。* - b — 第二个值。*
返回值 a 小于 b,则返回 1;否则返回 0 UInt8 示例 使用示例
Query
SELECT 1 < 2, 2 < 1;
Response
┌─less(1, 2)─┬─less(2, 1)─┐
│          1 │          0 │
└────────────┴────────────┘

lessOrEquals

Introduced in: v1.1.0 比较两个值是否满足小于或等于关系。 语法
lessOrEquals(a, b)
-- a <= b
参数
  • a — 第一个值。* - b — 第二个值。*
返回值 如果 a 小于或等于 b,则返回 1;否则返回 0UInt8 示例 使用示例
Query
SELECT 1 <= 2, 2 <= 2, 3 <= 2;
Response
┌─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 — 第二个值。*
返回值 如果 a 不等于 b,返回 1;否则返回 0UInt8 示例 使用示例
Query
SELECT 1 != 2, 1 != 1;
Response
┌─notEquals(1, 2)─┬─notEquals(1, 1)─┐
│               1 │               0 │
└─────────────────┴─────────────────┘

notIn

引入版本:v1.1.0 检查左操作数是否不属于右操作数集合。如果不在集合中,则返回 1,否则返回 0。左操作数中的 NULL 值会被跳过。 语法
notIn(x, set)
参数
  • x — 要检查的值。 - set — 值集合。
返回值 如果 x 不在该集合中,则返回 1,否则返回 0。UInt8 示例 基本用法
Query
SELECT 4 NOT IN (1, 2, 3)
Response
1

notInIgnoreSet

引入版本:v1.1.0 检查左操作数是否属于右操作数集合。若不在集合中,则返回 1,否则返回 0。左操作数中的 NULL 值会被跳过。 这是 IgnoreSet Variant,用于在不创建集合的情况下进行类型分析。 语法
notIn(x, set)
参数
  • x — 要检查的值。 - set — 值集合。
返回值 如果 x 不在该集合中,则返回 1;否则返回 0。 UInt8 示例 基本用法
Query
SELECT 4 NOT IN (1, 2, 3)
Response
1

notNullIn

首次引入版本:v1.1.0 检查左操作数是否不属于右操作数集合。与 notIn 不同,NULL 值不会被跳过:NULL 会与集合元素进行比较,且 NULL = NULL 的结果为 true。 语法
notNullIn(x, set)
参数
  • x — 待检查的值。 - set — 值的集合。
返回值 如果 x 不在集合中,则返回 1;否则返回 0。UInt8 示例 基本用法
Query
SELECT notNullIn(NULL, tuple(1, NULL))
Response
0

notNullInIgnoreSet

引入版本:v1.1.0 检查左操作数是否不在右操作数集合中。与 notIn 不同,NULL 值不会被跳过:NULL 会与集合中的元素进行比较,并且 NULL = NULL 的结果为 true。 这是 IgnoreSet 的一个Variant,用于类型分析,且不会创建集合。 语法
notNullIn(x, set)
参数
  • x — 要检查的值。 - set — 值集合。
返回值 如果 x 不在该集合中,则返回 1;否则返回 0。 UInt8 示例 基本用法
Query
SELECT notNullIn(NULL, tuple(1, NULL))
Response
0

nullIn

引入版本:v1.1.0 检查左操作数是否属于右操作数集合。与 in 不同,NULL 值不会被跳过:NULL 会与集合元素进行比较,且 NULL = NULL 的结果为 true。 语法
nullIn(x, set)
参数
  • x — 要检查的值。 - set — 值的集合。
返回值 如果 x 在集合中,则返回 1;否则返回 0。UInt8 示例 基本用法
Query
SELECT nullIn(NULL, tuple(1, NULL))
Response
1

nullInIgnoreSet

引入版本:v1.1.0 检查左操作数是否属于右操作数集合。与 in 不同,NULL 值不会被跳过:NULL 会与集合中的元素进行比较,且 NULL = NULL 的结果为 true。 这是 IgnoreSet 的一个 Variant,用于在不创建集合的情况下进行类型分析。 语法
nullIn(x, set)
参数
  • x — 要检查的值。 - set — 一组值。
返回值 如果 x 在该集合中,则返回 1,否则返回 0。UInt8 示例 基本用法
Query
SELECT nullIn(NULL, tuple(1, NULL))
Response
1
最后修改于 2026年6月10日