выбирать элементы с определенным "/" в SQL - PullRequest
0 голосов
/ 10 января 2012

Я провел небольшое исследование о escape-символах 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 ]

2 голосов
/ 10 января 2012

Вы можете использовать регулярное выражение:

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 голос
/ 10 января 2012

Вы можете использовать этот трюк для подсчета вхождений персонажа в строку:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...