在SQL中选择具有特定“/”的项目

时间:2012-01-10 00:33:04

标签: android sqlite 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

那么,如何选择只有2个斜杠的元素?

编辑1:这将在Android SQL-Lite数据库中完成

2 个答案:

答案 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