跳至主要内容
跳至主要内容

比较函数

比较规则

以下比较函数返回 01,类型为 UInt8。只能比较相同类型的值(例如 UInt16UInt64),不能跨类型比较(例如 UInt16DateTime)。数字和字符串之间可以比较,字符串和日期之间也可以比较,日期和时间之间也可以比较。对于元组和数组,比较方式是词法顺序,这意味着比较将针对左侧和右侧元组/数组的每个对应元素进行。

可以比较以下类型

  • 数字和十进制数
  • 字符串和定长字符串
  • 日期
  • 包含时间的日期
  • 元组(词法顺序比较)
  • 数组(词法顺序比较)
注意

字符串是逐字节比较的。如果其中一个字符串包含 UTF-8 编码的多字节字符,这可能会导致意外的结果。一个字符串 S1,如果它包含另一个字符串 S2 作为前缀,则被认为比 S2 更长。

等于

引入于:v1.1

比较两个值是否相等。

语法

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

参数

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

返回值

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

示例

使用示例

SELECT 1 = 1, 1 = 2;
┌─equals(1, 1)─┬─equals(1, 2)─┐
│            1 │            0 │
└──────────────┴──────────────┘

大于

引入于:v1.1

比较两个值是否大于关系。

语法

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 │
└───────────────┴───────────────┘

大于等于

引入于:v1.1

比较两个值是否大于等于关系。

语法

greaterOrEquals(a, b)
    -- 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 │
└───────────────────────┴───────────────────────┴───────────────────────┘

不相同

引入于:v25.11

执行两个值的空安全“不等于”比较。如果值不同(不相等),包括当一个值为 NULL 且另一个不为 NULL 时,则返回 true。如果值相等,或者两者都为 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 │
└──────────┴──────────┴──────────┴──────────┘

相同

引入于: v25.10

执行两个值的空安全“等于”比较。如果值相等,包括两者都为 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 │
└──────────┴──────────┴──────────┴──────────┘

小于

引入于:v1.1

比较两个值是否小于关系。

语法

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 │
└────────────┴────────────┘

小于等于

引入于:v1.1

比较两个值是否小于等于关系。

语法

lessOrEquals(a, b)
-- 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 │
└────────────────────┴────────────────────┴────────────────────┘

不等于

引入于:v1.1

比较两个值是否不相等。

语法

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 │
└─────────────────┴─────────────────┘
    © . This site is unofficial and not affiliated with ClickHouse, Inc.