SQLITE中是否有除“LIKE”之外的“CONTAINS”函数版本?

SQLITE中是否有除“LIKE”之外的“CONTAINS”函数版本?,sql,string,sqlite,csv,Sql,String,Sqlite,Csv,我试图找出每一个数字在1到7之间的总数。但数据包含这些数字的不同组合。例如,1;2.3,7; 1、2、3等等。我想找出每个数字弹出的总次数。我本质上想要的是SQLite的代码,它是这样的: select <fields>, count(*) from tablexyz where <field> contains '2' (and '3','4',... individually) 当我输入如“2%”之类的内容时,它只会给出所有以2开头的序列,但会否定以1开头但包含2的

我试图找出每一个数字在1到7之间的总数。但数据包含这些数字的不同组合。例如,1;2.3,7; 1、2、3等等。我想找出每个数字弹出的总次数。我本质上想要的是SQLite的代码,它是这样的:

select <fields>, count(*)
from tablexyz
where <field> contains '2' (and '3','4',... individually)
当我输入如“2%”之类的内容时,它只会给出所有以2开头的序列,但会否定以1开头但包含2的序列

任何帮助都将不胜感激

我想找出每个数字弹出的总次数

您的示例代码和您想要的解决方案并不完全一致。我能想到的最接近的是

with  t (txt) as -- a sample record from your table

(select '1; 2; 3,7; 1,2,3'),

t2 (num) as  -- a lookup table we can create for range of numbers 1-7

(select 1 union all
 select 2 union all
 select 3 union all
 select 4 union all
 select 5 union all
 select 6 union all
 select 7)

select t2.num, length(t.txt) - length(replace(t.txt,t2.num,'')) as num_occurence
from t2
left join t on t.txt like '%' || t2.num || '%'
输出


使用下面的解决方案,您可以构建一个包含数字1到7的表,然后将其连接到源数据表,以计数该行中是否出现数字,然后将其相加

查询
请提供示例源数据和您希望从该源数据获得的示例输出。您所说的包含是什么意思?这不是标准的SQL运算符。例如,在T-SQL中,它是一个自由文本搜索操作符,需要FTS索引来提供良好的性能。您可以使用“%2%”来查找任何位置包含2的字段。如果您需要一个运算符来分割数据并标识特定字段,那么您使用的设计是错误的。您应该创建一个单独的表来保存该数据。SQLite是一个嵌入式数据库,没有很多细节。它甚至没有类型,更不用说arraysAn embedded DB由您自己的应用程序运行。如果您试图做一些它不能有效处理的事情,那么与在代码中读取数据和解析数据相比,您最终会浪费时间。在这种情况下就是这样。SQLite无法索引这些值,因此必须扫描所有这些值。如果您只读取所有这些字符串并使用正则表达式来检查单个值,这会更好
+-----+---------------+
| num | num_occurence |
+-----+---------------+
|   1 | 2             |
|   2 | 2             |
|   3 | 2             |
|   4 | NULL          |
|   5 | NULL          |
|   6 | NULL          |
|   7 | 1             |
+-----+---------------+
WITH
    sample_data (nums)
    AS
        (SELECT '1,2,3,4,5,6' 
         UNION ALL
         SELECT '3,4,5,6' 
         UNION ALL
         SELECT '1,2,7,6' 
         UNION ALL
         SELECT '6' ),
    search_nums (search_num)
    AS
         (VALUES(1)
          UNION ALL
          SELECT search_num+1 FROM search_nums WHERE search_num<7)
select search_num, sum(count_of_num) from (
SELECT s.nums,
       n.search_num,
       case
         instr(s.nums, n.search_num)
         when 0 then 0
         else 1
       end as count_of_num
  FROM sample_data  s, search_nums n
) group by search_num;
search_num  sum(count_of_num)
1           2
2           2
3           2
4           2
5           2
6           4
7           1