在我的数据库中,我有一个表,用于存储json对象作为文本数据类型
示例:
表名users
id | role_ids | is_active
---+----------+----------
1 | [1, 3, 5]| t
2 | [1] | t
此处role_ids
列是作为文本存储的json对象
我需要根据使用like
运算符的role_ids查询用户
示例:
SELECT id FROM users WHERE role_ids LIKE '%1%';
在这种情况下,假设role_ids
字段具有91或将选择具有1的任何其他值,
如何仅通过在SQLite
中使用单个查询来选择完全为1的行
答案 0 :(得分:3)
为此,我将使用正则表达式,因为您要查找的是特定数字,这意味着该数字不会跟随或以数字字符开头:
SELECT id FROM users WHERE role_ids REGEXP '[^0-9]1[^0-9]'
答案 1 :(得分:1)
假设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,
格式的角色,可以轻松检查任何角色。附带说明,您应该避免在数据库表中存储未规范化的数据。