如何在SQL中使用like运算符匹配完美数字

时间:2018-09-11 10:01:01

标签: mysql postgresql sqlite

在我的数据库中,我有一个表,用于存储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的行

2 个答案:

答案 0 :(得分:3)

为此,我将使用正则表达式,因为您要查找的是特定数字,这意味着该数字不会跟随或以数字字符开头:

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

SQLFiddle

答案 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,格式的角色,可以轻松检查任何角色。附带说明,您应该避免在数据库表中存储未规范化的数据。