在SQL中选择具有某些“/”的项目
问题描述:
我对SQL转义字符和count语句做了一些研究,但没有找到解决我的问题的方法。虽然我用的东西,如:在SQL中选择具有某些“/”的项目
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-精简版数据库做
答
您可以使用这种伎俩来算一个字符出现在字符串:
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
答
您可以使用正则表达式:
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
如果必须在第一和最后/
后的东西,表达的改变为'^([^/]+)/([^/]+)/([^/]+)$'
'CHAR_LENGTH直接查询()'可能一般比'长度()'更可取:前者总是对字符进行计数,而后者则对字节进行计数,这并不总是对应于字符计数。 – 2012-01-10 01:35:23
肯定发生的想法似乎是关键,只需要弄清楚如何做查询。 – Raykud 2012-01-11 00:14:26