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

JSON операторы

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

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

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

подсказка

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

Ускорьте ваши запросы с помощью generated columns

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

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