Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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
SQLite:将字符串数组放置在文本列中,并使用数组中的元素加工该行_Sql_Arrays_Sqlite_Match - Fatal编程技术网

SQLite:将字符串数组放置在文本列中,并使用数组中的元素加工该行

SQLite:将字符串数组放置在文本列中,并使用数组中的元素加工该行,sql,arrays,sqlite,match,Sql,Arrays,Sqlite,Match,如何获取放置在SQLite3列中的字符串数组的元素 我有一个SQLite3表:Id INTEGER主键,pseudos TEXT,其中包含用户的Id和他使用的pseudos列表: 0|Bob, Avee 1|Test, Alice, Frank 2|Boby, Robert 3|Avebee, Bob 我怎样才能得到所有有peudo“Bob”而不是“Boby”的行呢?当我像“%Bob%”一样尝试时,我显然匹配了我希望避免的“Boby”女巫 注意:'pseudos'列可以容纳由“

如何获取放置在SQLite3列中的字符串数组的元素

我有一个SQLite3表:Id INTEGER主键,pseudos TEXT,其中包含用户的Id和他使用的pseudos列表:

0|Bob, Avee  
1|Test, Alice, Frank  
2|Boby, Robert  
3|Avebee, Bob  
我怎样才能得到所有有peudo“Bob”而不是“Boby”的行呢?当我像“%Bob%”一样尝试时,我显然匹配了我希望避免的“Boby”女巫

注意:'pseudos'列可以容纳由“,”分隔的未限定数量的喷出物。可以更改分隔符。

Pseudo中没有空格

最好使用UserId和Pseudo(一行一行)创建单独的表并与之连接以进行搜索。

最好使用UserId和Pseudo(一行一行)创建单独的表并与之连接以进行搜索。

如果Oracle DB和SQLite,使用类似的substr和direct instr

从测试中选择*,其中上(SUBSTR(pseudos,INSTR(pseudos,)+1))类似上(“%Bob%”);

如果是Oracle DB和SQLite,请使用类似的substr和direct instr

从测试中选择*,其中上(SUBSTR(pseudos,INSTR(pseudos,)+1))类似上(“%Bob%”);

好的,这里的问题是非1NF设计以及如何使数据库独立。我可以想象在SQLite或PostgreSQL上解决这个问题,但在这两种语言上提出一个好的性能解决方案不太容易,也不值得花时间去做

在SQLite中,我将研究索引的FT3和FT4扩展,tat可能有效地支持like子句中的中缀。您可以在PostgreSQL中使用trigram索引来实现类似的功能,但需要进行更多的额外检查,因此这可能不是一个足够的答案

在PostgreSQL中,我会存储一个术语数组,并使用GIN索引来解决这个问题,但在SQLite上并不容易支持


因此,数据库中立性的最佳选择是规范化,并将伪数据存储在另一个表中。那么它只是一个连接。否则,您必须为您想要支持的每个数据库构建不同的解决方案。

好的,所以这里的问题是非1NF设计以及如何使该数据库独立。我可以想象在SQLite或PostgreSQL上解决这个问题,但在这两种语言上提出一个好的性能解决方案不太容易,也不值得花时间去做

在SQLite中,我将研究索引的FT3和FT4扩展,tat可能有效地支持like子句中的中缀。您可以在PostgreSQL中使用trigram索引来实现类似的功能,但需要进行更多的额外检查,因此这可能不是一个足够的答案

在PostgreSQL中,我会存储一个术语数组,并使用GIN索引来解决这个问题,但在SQLite上并不容易支持



因此,数据库中立性的最佳选择是规范化,并将伪数据存储在另一个表中。那么它只是一个连接。否则,您必须为您想要支持的每个数据库构建不同的解决方案。

我无法编辑该表,因此该解决方案不可行我无法编辑该表,因此该解决方案不可行您使用哪个SQL Server版本?我使用的是SQLite3,但我想知道是否有一个解决方案可以在所有数据库上运行SQL@oryol,谁说是SQL Server?永远不要将数据存储为逗号分隔的项。这只会给你带来很多麻烦!在所有SQL上-SQL语法可能因不同的数据库管理系统而异,您使用的是哪个SQL Server版本?我使用的是SQLite3,但我想知道是否有一种解决方案可以适用于所有数据库管理系统SQL@oryol,谁说是SQL Server?永远不要将数据存储为逗号分隔的项。这只会给你带来很多麻烦!在所有SQL中,SQL语法在不同的数据库管理系统中可能会有所不同,请从测试中选择*,其中pseudos=SUBSTR(pseudos,INSTR(pseudos),)+1),如“%Bob%”;没有给出任何信息,我是否没有正确应用您的解决方案?(尝试了“%BOB%”、“%BOB%”和“%BOB%”但没有任何结果,只尝试了“%”并获得了所有结果)为了解决大写和小写的问题,请使用大写。从测试中选择*,其中上层(SUBSTR(pseudos,INSTR(pseudos,)+1))类似上层(“%Bob%”);它工作得更多,但只有马赫“Aveebe,Bob”,而不是“Bob,Avee”[编辑]在添加更多要测试的行之后,似乎马赫Bob正确,但不是在行的开头。添加一个条件以匹配行的行距是一个好主意吗?从测试中选择*,其中pseudos=SUBSTR(pseudos,INSTR(pseudos),)+1,如“%Bob%”;没有给出任何信息,我是否没有正确应用您的解决方案?(尝试了“%BOB%”、“%BOB%”和“%BOB%”但没有任何结果,只尝试了“%”并获得了所有结果)为了解决大写和小写的问题,请使用大写。从测试中选择*,其中上层(SUBSTR(pseudos,INSTR(pseudos,)+1))类似上层(“%Bob%”);它工作得更多,但只有“Aveebee,Bob”,而不是“Bob,Avee”[编辑]在添加更多要测试的行之后,似乎它正确地处理了Bob,但没有在行的开头添加一个条件以匹配行的开始是一个好主意吗?