我做了一些关于sql转义字符和count语句的研究,并没有找到我的问题的解决方案。即使我使用过像:
这样的东西SELECT * FROM table WHERE path LIKE '%/_%' ESCAPE '/';
我有一张桌子,在列中有路径,所以我想选择我有一定数量的斜线的项目:
ID DIRECTORY
1 root/A
2 root/B
3 root/A/1/2
4 root/B/1/2
5 root/A/1
6 root/B/2
那么,如何选择只有2个斜杠的元素?
编辑1:这将在Android SQL-Lite数据库中完成
答案 0 :(得分:2)
您可以使用正则表达式:
SELECT * FROM table WHERE path REGEXP '^([^/]*)/([^/]+)/([^/]*)$';
上面的表达式专门针对不包含/
的可选字符组,后跟/
,后跟另一个没有/
的组,后跟/
,可选地在字符串结尾之前另一组字符。
所以:
/Bxx92/2 -- match
5 root/A/1 -- match
6 root/Bxx92/2 -- match
6 root/Bxx92/2 -- match
7 root/Bxx92/ -- match
6 root/2 -- NO match
如果在第一个/
之前和之后必须有某些内容,请将表达式更改为'^([^/]+)/([^/]+)/([^/]+)$'
答案 1 :(得分:1)
您可以使用此技巧计算字符串中字符的出现次数:
SELECT LENGTH('path') - LENGTH(REPLACE('path', '/', '')) AS `occurrences`
所以你可以用
实现目标SELECT id, path FROM
(SELECT id, path, LENGTH('path') - LENGTH(REPLACE('path', '/', '')) AS `occurrences`
FROM table) temp
WHERE occurrences = 2
然而,我预计表现会很糟糕。如果要进行类似的查询,请考虑添加具有路径深度的列,以便您可以直接使用
进行查询SELECT id, path FROM table WHERE depth = 2