Перейти к основному содержимому
Перейти к основному содержимому

Функции сравнения

Правила сравнения

Перечисленные ниже функции сравнения возвращают значения 0 или 1 типа UInt8. Сравнивать можно только значения внутри одной группы (например, UInt16 и UInt64), но не между группами (например, UInt16 и DateTime). Возможны сравнения чисел и строк, а также строк с датами и дат с временем. Для кортежей и массивов используется лексикографическое сравнение, то есть сравнение выполняется для каждого соответствующего элемента кортежа/массива слева и справа.

Сравнивать можно следующие типы:

  • числа и десятичные числа
  • строки и строки фиксированной длины
  • даты
  • даты со временем
  • кортежи (лексикографическое сравнение)
  • массивы (лексикографическое сравнение)
Примечание

Строки сравниваются побайтно. Это может приводить к неожиданным результатам, если одна из строк содержит многобайтовые символы в кодировке UTF-8. Строка S1, для которой строка S2 является префиксом, считается более длинной, чем S2.

equals

Добавлена в версии: v1.1

Сравнивает два значения на равенство.

Синтаксис

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

Аргументы

  • a — первое значение.* - b — второе значение.*

Возвращаемое значение

Возвращает 1, если a равно b, иначе 0 типа UInt8.

Примеры

Пример использования

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

globalIn

Введён в: v1.1

Аналогичен in, но использует глобальное распределение Set в распределённых запросах. Set отправляется на все удалённые серверы.

Синтаксис

globalIn(x, set)

Аргументы

  • x — проверяемое значение. - set — набор значений.

Возвращаемое значение

Возвращает 1, если x содержится в set, и 0 в противном случае. UInt8

Примеры

Базовое использование

SELECT 1 IN (1, 2, 3)
1

globalInIgnoreSet

Добавлена в: v1.1

То же, что и in, но использует глобальное распределение Set в распределённых запросах. Set отправляется на все удалённые серверы. Это вариант IgnoreSet, который используется для анализа типов без создания Set.

Синтаксис

globalIn(x, set)

Аргументы

  • x — Проверяемое значение. - set — Set значений.

Возвращаемое значение

Возвращает 1, если x принадлежит set, и 0 в противном случае. UInt8

Примеры

Базовое использование

SELECT 1 IN (1, 2, 3)
1

globalNotIn

Введена в версии v1.1

То же, что и notIn, но использует глобальное распределение Set в распределённых запросах. Set отправляется на все удалённые серверы.

Синтаксис

globalNotIn(x, set)

Аргументы

  • x — проверяемое значение. - set — множество значений.

Возвращаемое значение

Возвращает 1, если x не входит в множество, иначе 0. UInt8

Примеры

Базовое использование

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

globalNotInIgnoreSet

Добавлено в версии v1.1

То же, что и notIn, но использует глобальное распределение Set в распределённых запросах. Set отправляется на все удалённые серверы. Это вариант IgnoreSet, который используется для анализа типов без создания Set.

Синтаксис

globalNotIn(x, set)

Аргументы

  • x — проверяемое значение.
  • set — набор значений.

Возвращаемое значение

Возвращает 1, если x отсутствует в наборе, и 0 в противном случае. UInt8

Примеры

Базовое использование

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

globalNotNullIn

Введена в версии: v1.1

То же, что и notNullIn, но использует глобальное распределение Set в распределённых запросах. Set отправляется на все удалённые серверы.

Синтаксис

globalNotNullIn(x, set)

Аргументы

  • x — значение, которое нужно проверить. - set — набор значений.

Возвращаемое значение

Возвращает 1, если x отсутствует в наборе, и 0 в противном случае. UInt8

Примеры

Базовое использование

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

globalNotNullInIgnoreSet

Добавлено в: v1.1

То же, что и notNullIn, но использует глобальное распределение Set при выполнении распределённых запросов. Set отправляется на все удалённые серверы. Это вариант IgnoreSet, который используется для анализа типов без создания Set.

Синтаксис

globalNotNullIn(x, set)

Аргументы

  • x — Проверяемое значение. - set — Множество значений.

Возвращаемое значение

Возвращает 1, если x отсутствует во множестве, иначе 0. UInt8

Примеры

Базовое использование

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

globalNullIn

Впервые появилась в версии v1.1

То же, что и nullIn, но использует глобальное распределение Set в распределённых запросах. Set отправляется на все удалённые серверы.

Синтаксис

globalNullIn(x, set)

Аргументы

  • x — значение для проверки. - set — набор значений.

Возвращаемое значение

Возвращает 1, если x принадлежит множеству, иначе — 0. UInt8

Примеры

Базовое использование

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

globalNullInIgnoreSet

Добавлен в: v1.1

То же, что nullIn, но использует глобальное распределение Set в распределённых запросах. Set отправляется на все удалённые серверы. Это вариант IgnoreSet, который используется для анализа типов без создания Set.

Синтаксис

globalNullIn(x, set)

Аргументы

  • x — Проверяемое значение. - set — Множество значений.

Возвращаемое значение

Возвращает 1, если x находится в set, в противном случае — 0. UInt8

Примеры

Базовое использование

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

greater

Добавлена в версии v1.1

Проверяет, является ли одно значение больше другого.

Синтаксис

greater(a, b)
    -- a > b

Аргументы

  • a — Первое значение.* - b — Второе значение.*

Возвращаемое значение

Возвращает 1, если a больше b, иначе 0 типа UInt8

Примеры

Пример использования

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

greaterOrEquals

Появилась в версии: v1.1

Сравнивает два значения, проверяя, выполняется ли отношение «больше или равно».

Синтаксис

greaterOrEquals(a, b)
    -- a >= b

Аргументы

  • a — первое значение.* - b — второе значение.*

Возвращаемое значение

Возвращает 1, если a больше либо равно b, в противном случае — 0 типа UInt8.

Примеры

Пример использования

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

in

Впервые представлена в: v1.1

Проверяет, является ли левый операнд элементом множества, заданного правым операндом. Возвращает 1, если является, и 0 в противном случае. Значения NULL в левом операнде пропускаются (считаются отсутствующими в множестве).

Синтаксис

in(x, set)

Аргументы

  • x — Значение для проверки. - set — Набор значений.

Возвращаемое значение

Возвращает 1, если x находится в наборе, иначе 0. UInt8

Примеры

Базовое использование

SELECT 1 IN (1, 2, 3)
1

inIgnoreSet

Введена в версии: v1.1

Проверяет, является ли левый операнд элементом множества правого операнда. Возвращает 1, если да, и 0 в противном случае. Значения NULL в левом операнде пропускаются (рассматриваются как отсутствующие в множестве). Это вариант IgnoreSet, используемый при анализе типов без создания Set.

Синтаксис

in(x, set)

Аргументы

  • x — значение для проверки.
  • set — набор значений.

Возвращаемое значение

Возвращает 1, если x содержится в наборе, иначе 0. UInt8

Примеры

Базовое использование

SELECT 1 IN (1, 2, 3)
1

isDistinctFrom

Введена в версии: v25.11

Выполняет NULL-безопасное сравнение «не равно» между двумя значениями. Возвращает true, если значения различаются (не равны), включая случай, когда одно значение равно NULL, а другое — нет. Возвращает false, если значения равны или если оба равны NULL.

Синтаксис

isDistinctFrom(x, y)

Аргументы

  • x — первое значение для сравнения. Может иметь любой тип данных ClickHouse. Any
  • y — второе значение для сравнения. Может иметь любой тип данных ClickHouse. Any

Возвращаемое значение

Возвращает true, если два значения различаются, при этом NULL считаются сравнимыми значениями:

  • Возвращает true, если x != y.
    • Возвращает true, если ровно одно из x или y равно NULL.
    • Возвращает false, если x = y или оба x и y равны NULL. Bool

Примеры

Базовое использование с числами и 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

Добавлена в версии: v25.10

Выполняет безопасное в отношении NULL сравнение на равенство между двумя значениями. Возвращает true, если значения равны, включая случай, когда оба равны NULL. Возвращает false, если значения различаются или если ровно одно из них равно NULL.

Синтаксис

isNotDistinctFrom(x, y)

Аргументы

  • x — первое значение для сравнения. Может быть любого типа данных ClickHouse. Any
  • y — второе значение для сравнения. Может быть любого типа данных ClickHouse. Any

Возвращаемое значение

Возвращает true, если два значения равны, считая значения NULL сравнимыми:

  • Возвращает true, если x = y.
    • Возвращает true, если и x, и y равны NULL.
    • Возвращает false, если x != y или только одно из x или y равно NULL. Bool

Примеры

Базовое использование с числами и 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

Сравнивает два значения на предмет отношения «меньше чем».

Синтаксис

less(a, b)
    -- a < b

Аргументы

  • a — первое значение.* - b — второе значение.*

Возвращаемое значение

Возвращает 1, если a меньше b, в противном случае — 0 UInt8.

Примеры

Пример использования

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

lessOrEquals

Добавлена в версии: v1.1

Сравнивает два значения на предмет отношения «меньше или равно».

Синтаксис

lessOrEquals(a, b)
-- a <= b

Аргументы

  • a — первое значение.* - b — второе значение.*

Возвращаемое значение

Возвращает 1, если a меньше или равно b, иначе — 0 (типа UInt8).

Примеры

Пример использования

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

notEquals

Появилась в версии: v1.1

Сравнивает два значения на неравенство.

Синтаксис

notEquals(a, b)
    -- a != b
    -- a <> b

Аргументы

  • a — первое значение.* - b — второе значение.*

Возвращаемое значение

Возвращает 1, если a не равно b, в противном случае — 0. UInt8

Примеры

Пример использования

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

notIn

Впервые появилась в: v1.1

Проверяет, что левый операнд НЕ является элементом множества, заданного правым операндом. Возвращает 1, если он отсутствует в множестве, и 0 в противном случае. Значения NULL в левом операнде пропускаются.

Синтаксис

notIn(x, set)

Аргументы

  • x — значение, которое нужно проверить. - set — множество значений.

Возвращаемое значение

Возвращает 1, если x отсутствует в множестве, и 0 в противном случае. UInt8

Примеры

Базовое использование

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

notInIgnoreSet

Появилась в версии: v1.1

Проверяет, что левый операнд НЕ принадлежит множеству, заданному правым операндом. Возвращает 1, если значения нет в множестве, и 0 в противном случае. Значения NULL в левом операнде пропускаются. Это вариант IgnoreSet, используемый для анализа типов без создания Set.

Синтаксис

notIn(x, set)

Аргументы

  • x — значение, которое нужно проверить. - set — набор значений.

Возвращаемое значение

Возвращает 1, если x отсутствует в наборе, иначе 0. UInt8

Примеры

Базовое использование

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

notNullIn

Впервые добавлена в: v1.1

Проверяет, что левый операнд НЕ является элементом множества в правом операнде. В отличие от notIn, значения NULL не пропускаются: NULL сравнивается с элементами Set, и выражение NULL = NULL оценивается как true.

Синтаксис

notNullIn(x, set)

Аргументы

  • x — значение для проверки. - set — множество значений.

Возвращаемое значение

Возвращает 1, если x не содержится в множестве, и 0 — в противном случае. UInt8

Примеры

Базовое использование

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

notNullInIgnoreSet

Добавлено в версии: v1.1

Проверяет, что левый операнд НЕ принадлежит множеству, заданному правым операндом. В отличие от notIn, значения NULL не пропускаются: NULL сравнивается с элементами множества, и выражение NULL = NULL считается истинным. Это вариант IgnoreSet, используемый для анализа типов без создания множества.

Синтаксис

notNullIn(x, set)

Аргументы

  • x — значение для проверки.
  • set — множество значений.

Возвращаемое значение

Возвращает 1, если x не входит в множество, иначе 0. UInt8

Примеры

Базовое использование

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

nullIn

Введена в версии: v1.1

Проверяет, принадлежит ли левый операнд множеству правого операнда. В отличие от in, значения NULL не пропускаются: NULL сравнивается с элементами множества, и выражение NULL = NULL вычисляется в истину.

Синтаксис

nullIn(x, set)

Аргументы

  • x — проверяемое значение. - set — набор значений.

Возвращаемое значение

Возвращает 1, если x содержится в наборе, иначе 0. UInt8

Примеры

Базовое использование

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

nullInIgnoreSet

Введена в: v1.1

Проверяет, является ли левый операнд элементом множества в правом операнде. В отличие от in, значения NULL не пропускаются: NULL сравнивается с элементами множества, и выражение NULL = NULL вычисляется как true. Это вариант IgnoreSet, который используется для анализа типов без создания множества.

Синтаксис

nullIn(x, set)

Аргументы

  • x — Проверяемое значение. - set — Набор значений.

Возвращаемое значение

Возвращает 1, если x принадлежит набору, и 0 в противном случае. UInt8

Примеры

Базовое использование

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