Mysql 如何在sql中使用like算子匹配完全数
在我的数据库中有一个表,它将json对象存储为文本数据类型 例如:Mysql 如何在sql中使用like算子匹配完全数,mysql,postgresql,sqlite,Mysql,Postgresql,Sqlite,在我的数据库中有一个表,它将json对象存储为文本数据类型 例如: SELECT id FROM users WHERE role_ids LIKE '%1%'; 表名用户 id | role_ids | is_active ---+----------+---------- 1 | [1, 3, 5]| t 2 | [1] | t 这里的role\u id列是存储为文本的json对象 我需要根据我使用的类似的操作符的角色ID来查询用户 例如: SELECT id FROM u
SELECT id FROM users WHERE role_ids LIKE '%1%';
表名用户
id | role_ids | is_active
---+----------+----------
1 | [1, 3, 5]| t
2 | [1] | t
这里的role\u id
列是存储为文本的json对象
我需要根据我使用的类似的操作符的角色ID来查询用户
例如:
SELECT id FROM users WHERE role_ids LIKE '%1%';
在这种情况下,假设角色\u id
字段有91个值,或者将选择任何其他有1个值的值
如何通过在SQLite
中使用单个查询来选择完全具有1的行?假设角色ID
列只有一个级别的JSON数组,我们可以尝试将该值转换为纯CSV值,然后执行类似的比较:
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、
格式的角色,就可以轻松地检查任何角色。作为补充说明,您应该避免在数据库表中存储未规范化的数据。假设角色ID
列将只包含一个单一级别的JSON数组,我们可以尝试将该值转换为纯CSV值,然后执行类似的比较:
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、
格式的角色,就可以轻松地检查任何角色。作为补充说明,您应该避免在数据库表中存储非规范化数据。我将使用正则表达式来实现此目的,因为您要查找的特定数字意味着该数字后面或前面没有数字字符:
SELECT id FROM users WHERE role_ids REGEXP '[^0-9]1[^0-9]'
我会使用正则表达式来实现这一目的,因为您要查找的特定数字意味着该数字后面或前面没有数字字符:
SELECT id FROM users WHERE role_ids REGEXP '[^0-9]1[^0-9]'
mysql或postgresql?。。。或者是SQLite?@Oto Shavadze我知道如何在postgresql中使用它,这很简单,我只需要使用@>就可以了,但我想知道如何在mysql或sqlite3@TimBiegeleisen那么,你的问题要明确!mysql还是postgresql?。。。或者是SQLite?@Oto Shavadze我知道如何在postgresql中使用它,这很简单,我只需要使用@>就可以了,但我想知道如何在mysql或sqlite3@TimBiegeleisen那么,你的问题要明确!不转换成另一种格式是可能的,因为我在某处看到了一种方法,但我忘记了它的Qlite似乎提供了一些JSON函数,但我不知道它们是否可以在Android上使用。但它不起作用
。。。你认为这有助于我更新答案吗?您能更具体一点吗?要启用json函数,我们需要启用JSON1扩展。这是因为sqlite3.9本机不支持json或jsonb函数。要启用json1扩展,我需要编译json1扩展
构建sqlite3.9。但是我不知道怎么做,嗯……Java端的Android肯定支持丰富的JSON API。也许你可以在你的应用程序中进行检查,而不是在数据库中进行检查?不转换为其他格式也是可能的,因为我在某处看到了一种方法,但我忘记了它的Qlite似乎提供了一些JSON函数,但我不知道它们是否可以在Android上使用。但它不起作用
。。。你认为这有助于我更新答案吗?您能更具体一点吗?要启用json函数,我们需要启用JSON1扩展。这是因为sqlite3.9本机不支持json或jsonb函数。要启用json1扩展,我需要编译json1扩展
构建sqlite3.9。但是我不知道怎么做,嗯……Java端的Android肯定支持丰富的JSON API。也许你可以在你的应用程序中进行检查,而不是在数据库中进行检查?我更喜欢这个而不是我的答案,至少在这个特殊情况下+1。@TimBiegeleisen谢谢你,我赞赏你的公平行为我更喜欢这个而不是我的答案,至少在这个特殊情况下+1。@TimBiegeleisen谢谢你,我赞赏你的公平行为