使用随机字符分隔符匹配 SQLite 中的数字序列
Posted
技术标签:
【中文标题】使用随机字符分隔符匹配 SQLite 中的数字序列【英文标题】:Matching number sequences in SQLite with random character separators 【发布时间】:2014-05-15 22:12:02 【问题描述】:我有一个 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%'
【问题讨论】:
为什么“庞大”的数据库会让您不想再添加一列? 【参考方案1】:好的,这远非很好,但您可以直接嵌套REPLACE
函数。示例:
SELECT _id FROM myTable
WHERE REPLACE(..... REPLACE(REPLACE(data,'-',''),'_',''), .... '<all other separators>','') = '12345'
在实践中使用它时(我不推荐它,但至少它很简单),你肯定可以将它包装在一个函数中。
编辑:有关REPLACE
函数的小文档,请参见here,例如。
【讨论】:
【参考方案2】:如果我猜对了,这就是你想要的吗?
SELECT _id
FROM myTable
WHERE Replace(Replace(Replace(data, '?', ''), '/', ''), '-', '') LIKE '%12345%'
【讨论】:
以上是关于使用随机字符分隔符匹配 SQLite 中的数字序列的主要内容,如果未能解决你的问题,请参考以下文章