我有一个sqlite数据库,其中包含带有随机分隔符的数字序列。例如
_id data
0 123-45/678>90
1 11*11-22-333
2 4-4-5-67891
我希望能够智能地查询数据库"有和没有分隔符。例如,这两个查询都返回_id = 0
SELECT _id FROM myTable WHERE data LIKE '%123-45%'
SELECT _id FROM myTable WHERE data LIKE '%12345%'
第一个查询按原样运行,但第二个查询是问题。由于分隔符在数据库中随机出现,因此在搜索项中有太多组合要循环。
我可以创建两个列,一个包含分隔符,另一个没有,每个列都运行每个查询,但数据库很大,所以我想尽可能避免这种情况。
有没有办法构建第二个查询来实现这个目的?在查询期间,每行都像正则表达式?伪代码
SELECT _id
FROM myTable
WHERE REPLACEALL(data,'(?<=\\d)[-/>*](?=\\d)','') LIKE '%12345%'
答案 0 :(得分:0)
好的,这远不是很好,但你可以直接嵌套REPLACE
函数。例如:
SELECT _id FROM myTable
WHERE REPLACE(..... REPLACE(REPLACE(data,'-',''),'_',''), .... '<all other separators>','') = '12345'
在实践中使用它时( - 不是我会推荐它,但至少它很简单),你肯定可以把它包装在一个函数中。
编辑:对于REPLACE
函数上的小型文档,请参阅here,例如。
答案 1 :(得分:0)
如果我做对了,这就是你想要的吗?
SELECT _id
FROM myTable
WHERE Replace(Replace(Replace(data, '?', ''), '/', ''), '-', '') LIKE '%12345%'