繁体   English   中英

在SQL中选择带有某些“ /”的项目

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM