Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

比较函数

比较规则

下面的比较函数返回 01,返回类型为 UInt8。只有同一组内的值才能进行比较 (例如 UInt16UInt64) ,不能跨组比较 (例如 UInt16DateTime) 。 数值和字符串之间可以比较,字符串也可以与日期比较,日期也可以与时间进行比较。 对于元组和数组,比较采用字典序,也就是说会依次比较左侧和右侧元组/数组中对应的各个 元素。

以下类型可以比较:

  • 数值和十进制数
  • 字符串和定长字符串
  • 日期
  • 带时间的日期
  • 元组 (按字典序比较)
  • 数组 (按字典序比较)

equals

首次引入版本:v1.1.0

比较两个值是否相等。

语法

equals(a, b)
        -- a = b
        -- a == b

参数

  • a — 第一个值。* - b — 第二个值。*

返回值

如果 a 等于 b,则返回 1;否则返回 0UInt8

示例

用法示例

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)
1

globalInIgnoreSet

引入版本:v1.1.0

in 相同,但在分布式查询中使用全局集合分发机制。该集合会被发送到所有远程服务器。 这是 IgnoreSet Variant,用于在不创建集合的情况下进行类型分析。

语法

globalIn(x, set)

参数

  • x — 要检查的值。 - set — 值集合。

返回值

如果 x 在集合中,则返回 1;否则返回 0。 UInt8

示例

基本用法

SELECT 1 IN (1, 2, 3)
1

globalNotIn

引入版本:v1.1.0

notIn 相同,但在分布式查询中使用全局集合分发机制。该集合会发送到所有远程服务器。

语法

globalNotIn(x, set)

参数

  • x — 要检查的值。 - set — 值的集合。

返回值

如果 x 不在集合中,则返回 1,否则返回 0。UInt8

示例

基本用法

SELECT 4 NOT IN (1, 2, 3)
1

globalNotInIgnoreSet

引入版本:v1.1.0

notIn 相同,但在分布式查询中使用全局集合分发机制。该集合会被发送到所有远程服务器。 这是 IgnoreSet Variant,用于在不创建集合的情况下进行类型分析。

语法

globalNotIn(x, set)

参数

  • x — 要检查的值。 - set — 值集合。

返回值

如果 x 不在该集合中,则返回 1,否则返回 0。UInt8

示例

基本用法

SELECT 4 NOT IN (1, 2, 3)
1

globalNotNullIn

引入版本:v1.1.0

notNullIn 相同,但在分布式查询中使用全局集合分发。该 Set 会发送到所有远程服务器。

语法

globalNotNullIn(x, set)

参数

  • x — 要检查的值。 - set — 值的集合。

返回值

如果 x 不在该集合中,则返回 1;否则返回 0。UInt8

示例

基本用法

SELECT notNullIn(NULL, tuple(1, NULL))
1

globalNotNullInIgnoreSet

引入版本:v1.1.0

notNullIn 相同,但在分布式查询中使用全局集合分发。该集合会发送到所有远程服务器。 这是 IgnoreSet Variant,用于在不创建集合的情况下进行类型分析。

语法

globalNotNullIn(x, set)

参数

  • x — 要检查的值。 - set — 值集合。

返回值

如果 x 不在该集合中,则返回 1;否则返回 0。 UInt8

示例

基本用法

SELECT notNullIn(NULL, tuple(1, NULL))
1

globalNullIn

引入版本:v1.1.0

nullIn 相同,但在分布式查询中使用全局集合分发。该集合会发送到所有远程服务器。

语法

globalNullIn(x, set)

参数

  • x — 要检查的值。 - set — 值集合。

返回值

如果 x 在该集合中,则返回 1,否则返回 0。 UInt8

示例

基本用法

SELECT nullIn(NULL, tuple(1, NULL))
0

globalNullInIgnoreSet

引入版本:v1.1.0

nullIn 相同,但在分布式查询中使用全局集合分发。该集合会被发送到所有远程服务器。 这是用于类型分析且不会创建该集合的 IgnoreSet Variant。

语法

globalNullIn(x, set)

参数

  • x — 要检查的值。 - set — 值的集合。

返回值

如果 x 在该集合中,返回 1;否则返回 0。UInt8

示例

基本用法

SELECT nullIn(NULL, tuple(1, NULL))
0

greater

引入版本:v1.1.0

比较两个值,判断前者是否大于后者。

语法

greater(a, b)
    -- 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 — 第二个值。*

返回值

如果 a 大于或等于 b,则返回 1;否则返回 0UInt8

示例

使用示例

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)
1

inIgnoreSet

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)
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 的基本用法

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)

参数

  • x — 要比较的第一个值。可以是任意 ClickHouse 数据类型。Any
  • y — 要比较的第二个值。可以是任意 ClickHouse 数据类型。Any

返回值

如果两个值相等,则返回 true;NULL 也会被视为可比较值:

  • 如果 x = y,则返回 true
    • 如果 x 和 y 均为 NULL,则返回 true
    • 如果 x != y,或者 x 和 y 中恰好有一个为 NULL,则返回 falseBool

示例

数字和 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 — 第二个值。*

返回值

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 — 第二个值。*

返回值

如果 a 小于或等于 b,则返回 1;否则返回 0UInt8

示例

使用示例

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 — 第二个值。*

返回值

如果 a 不等于 b,返回 1;否则返回 0UInt8

示例

使用示例

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)
1

notInIgnoreSet

引入版本:v1.1.0

检查左操作数是否属于右操作数集合。若不在集合中,则返回 1,否则返回 0。左操作数中的 NULL 值会被跳过。 这是 IgnoreSet Variant,用于在不创建集合的情况下进行类型分析。

语法

notIn(x, set)

参数

  • x — 要检查的值。 - set — 值集合。

返回值

如果 x 不在该集合中,则返回 1;否则返回 0。 UInt8

示例

基本用法

SELECT 4 NOT IN (1, 2, 3)
1

notNullIn

首次引入版本:v1.1.0

检查左操作数是否不属于右操作数集合。与 notIn 不同,NULL 值不会被跳过:NULL 会与集合元素进行比较,且 NULL = NULL 的结果为 true。

语法

notNullIn(x, set)

参数

  • x — 待检查的值。 - set — 值的集合。

返回值

如果 x 不在集合中,则返回 1;否则返回 0。UInt8

示例

基本用法

SELECT notNullIn(NULL, tuple(1, NULL))
1

notNullInIgnoreSet

引入版本: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))
1

nullIn

引入版本:v1.1.0

检查左操作数是否属于右操作数集合。与 in 不同,NULL 值不会被跳过:NULL 会与集合元素进行比较,且 NULL = NULL 的结果为 true。

语法

nullIn(x, set)

参数

  • x — 要检查的值。 - set — 值的集合。

返回值

如果 x 在集合中,则返回 1;否则返回 0。UInt8

示例

基本用法

SELECT nullIn(NULL, tuple(1, NULL))
0

nullInIgnoreSet

引入版本: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
Navigation