Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何在sql中使用like算子匹配完全数_Mysql_Postgresql_Sqlite - Fatal编程技术网

Mysql 如何在sql中使用like算子匹配完全数

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

在我的数据库中有一个表,它将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 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谢谢你,我赞赏你的公平行为