Как найти идеальное число с помощью оператора like в sql - PullRequest
0 голосов
/ 11 сентября 2018

В моей базе данных есть таблица, в которой хранится объект json в виде текстового типа

Пример:

Название таблицы users

id | role_ids | is_active
---+----------+----------
1  | [1, 3, 5]| t
2  | [1]      | t

здесь столбец role_ids - это объект json, который хранится в виде текста

Мне нужно запросить пользователя на основе role_ids для этого, используя like operator

Пример:

SELECT id FROM users WHERE role_ids LIKE '%1%';

в этом случае предположим, что поле role_ids имеет 91 или будут выбраны любые другие значения, имеющие 1,

Как я могу выбрать строки, которые идеально имеют 1, просто используя один запрос в SQLite

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Я бы использовал регулярные выражения для этой цели, так как вы ищете конкретное число, означающее, что число не сопровождается и не следует за числовым символом:

SELECT id FROM users WHERE role_ids REGEXP '[^0-9]1[^0-9]'

SQLFiddle

0 голосов
/ 11 сентября 2018

Если предположить, что столбцы role_ids будут иметь только одноуровневый массив JSON, мы можем попытаться преобразовать это значение в чистое значение CSV, а затем выполнить сравнение LIKE:

SELECT id
FROM users
WHERE
    ',' || REPLACE(SUBSTR(role_ids, 2, length(role_ids) - 1), ' ', '') || ','
        LIKE '%,1,%';

Вот последовательность строковых операций, например против [1, 3, 5]:

[1, 3, 5]
1, 3, 5     (after SUBSTR)
1,3,5       (after REPLACE)
,1,3,5,     (after ||)

С ролями в формате ,1,3,5, становится возможным легко проверить любую роль. В качестве примечания следует избегать хранения ненормализованных данных в таблицах базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...