SQL регулярное выражение, чтобы проверить, существует ли в массиве JSON хотя бы один элемент - PullRequest
1 голос
/ 22 апреля 2019

У меня есть таблица в MySQL 5.6 с текстовым полем типа "custom_info", который существует в виде строки JSON.Такое JSON-поле существует «клиенты» с массивом.

Чтобы выбрать записи, где «клиенты» пусты, я использую запрос:

select custom_info from users where custom_info like '%"clients":[]%'

Как я могу получить записи, где «клиенты»В массиве существует хотя бы один элемент?

Ответы [ 3 ]

5 голосов
/ 22 апреля 2019

MySQL изначально поддерживает JSON.Вместо хранения в виде строкового литерала я рекомендую хранить его как тип данных JSON .При этом откроются несколько встроенных функций, таких как JSON_CONTAINS , JSON_EXTRACT , JSON_ARRAY и JSON_OBJECT .

Затем вы можете использовать JSON_CONTAINS или JSON_EXTRACT для оценки ваших результатов;что-то вроде:

SELECT * 
FROM   custom_info
WHERE  JSON_CONTAINS(clients, 'some_value_youd_expect_to_be_here')

Или:

SELECT * 
FROM   custom_info
WHERE  JSON_EXTRACT('clients', '$[0]') is not null
2 голосов
/ 22 апреля 2019

Так как вы хотите возвращать только записи без ] после "clients":[, вы можете использовать

where custom_info REGEXP '"clients":\\[[^]]'

\\[ на самом деле является шаблоном \[, соответствующим буквальному символу [, а [^]] является выражением в виде отрицательной скобки, соответствующим любому символу butr a ].

1 голос
/ 22 апреля 2019

Если вы хотите сохранить свое поле в качестве типа текста, вы можете использовать _%, который будет соответствовать как минимум одному символу

select custom_info from users where custom_info like '%"clients":[_%]%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...