[英]Building a SQL “toxi” tagging system, how to select items with a specific tag?
[英]select items with certain “/” in SQL
我对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
因此,如何选择仅包含两个斜杠的元素?
编辑1:这将在Android SQL-Lite数据库中完成
您可以使用正则表达式:
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
如果在第一个/
之前和之后必须有内容,请将表达式更改为'^([^/]+)/([^/]+)/([^/]+)$'
您可以使用此技巧来计数字符串中字符的出现:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.