Перейти к основному содержимому
Версия: 2.0.x

JSON-операторы

Selena поддерживает следующие JSON-операторы сравнения: <, <=, >, >=, = и !=. Вы можете использовать эти операторы для запроса JSON-данных. Однако Selena не позволяет использовать IN для запроса JSON-данных.

  • Операнды оператора должны быть JSON-значениями.

  • Если один операнд оператора является JSON-значением, а другой - нет, операнд, не являющийся JSON-значением, преобразуется в JSON-значение во время арифметической операции. Дополнительную информацию о правилах преобразования см. в CAST.

подсказка

Все JSON-функции и операторы перечислены в навигации и на обзорной странице

Ускорьте ваши запросы с помощью генерируемых столбцов

Арифметические правила

JSON-операторы соответствуют следующим арифметическим правилам:

  • Когда операнды оператора являются JSON-значениями одного и того же типа данных:
    • Если оба операнда являются JSON-значениями базового типа данных, такого как NUMBER, STRING или BOOLEAN, оператор выполняет арифметическую операцию в соответствии с арифметическими правилами для базового типа данных.

Примечание: Если оба операнда являются числами, но один является значением DOUBLE, а другой - значением INT, оператор преобразует значение INT в значение DOUBLE.

  • Если оба операнда являются JSON-значениями составного типа данных, такого как OBJECT или ARRAY, оператор сортирует ключи в операндах в алфавитном порядке на основе последовательности ключей в первом операнде, а затем сравнивает значения ключей между операндами.

Пример 1:

Первый операнд - {"a": 1, "c": 2}, второй операнд - {"b": 1, "a": 2}. В этом примере оператор сравнивает значения ключей a между операндами. Значение ключа a в первом операнде равно 1, тогда как значение ключа a во втором операнде равно 2. Значение 1 меньше значения 2. Поэтому оператор делает вывод, что первый операнд {"a": 1, "c": 2} меньше второго операнда {"b": 1, "a": 2}.

mysql> SELECT PARSE_JSON('{"a": 1, "c": 2}') < PARSE_JSON('{"b": 1, "a": 2} ');

-> 1

Пример 2:

Первый операнд - {"a": 1, "c": 2}, второй операнд - {"b": 1, "a": 1}. В этом примере оператор сначала сравнивает значения ключей a между операндами. Значения ключей a в операндах оба равны 1. Затем оператор сравнивает значения ключей c в операндах. Второй операнд не содержит ключ c. Поэтому оператор делает вывод, что первый операнд {"a": 1, "c": 2} больше второго операнда {"b": 1, "a": 1}.

mysql> SELECT PARSE_JSON('{"a": 1, "c": 2}') < PARSE_JSON('{"b": 1, "a": 1}');

-> 0
  • Когда операнды оператора являются JSON-значениями двух различных типов данных, оператор сравнивает операнды в соответствии со следующими арифметическими правилами: NULL < BOOLEAN < ARRAY < OBJECT < DOUBLE < INT < STRING.
mysql> SELECT PARSE_JSON('"a"') < PARSE_JSON('{"a": 1, "c": 2}');

-> 0