Если предположить, что столбцы 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,
становится возможным легко проверить любую роль. В качестве примечания следует избегать хранения ненормализованных данных в таблицах базы данных.