like и проблемы с шаблоном

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Prickly
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 82
Зарегистрирован: 07.10.2004 (Чт) 18:44
Откуда: From Russia

like и проблемы с шаблоном

Сообщение Prickly » 27.06.2005 (Пн) 17:43

Привет всем!

Объясняю проблему:

У меня есть такие записи в БД

\Child1
\Child2
\Child1\Child3
\Child1\Child4
\Child1\Child3\Child5

Мне необходимо сделать выборку, чтобы выбрать все значения

\Child1\Child3
\Child1\Child4.

Я написал такой вот код:

Код: Выделить всё
select * from table1 where path like "Child1\*[!\]*";


В результате выполнения возвращает

\Child1\Child3
\Child1\Child4
\Child1\Child3\Child5

Хотя последняя строка не должна присутствовать. Во всяком случае мне так кажется :D.

Народ помогите решить данную проблему, пожалуйста.

Использую VB6.0(DAO 3.6) и Access
Не было бы Гейтса, не было бы нас!

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 28.06.2005 (Вт) 0:32

Код: Выделить всё
where Path Like "Child1\Child[3-4]"
Кажется, так. Если я, конечно, правильно понял синтаксис Аксесса...

Prickly
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 82
Зарегистрирован: 07.10.2004 (Чт) 18:44
Откуда: From Russia

Сообщение Prickly » 28.06.2005 (Вт) 0:56

Child1\Child2

Это запись древовидной структуры

\Child1
\Child2
\Child1\Child3
\Child1\Child4
\Child1\Child3\Child5

в другой форме (может так будет понятнее)

-Child1
-Child3
+Child5
+Child4
+Child2

и мне не известно какой путь будет т.е. к примеру

Вместо Child1 -> Full
Вместо Child2 -> Nero

Мне нужна выборка следующего уровня за Child1, но не нужны згачения уровней за Child3 т.е. необходим второй уровень, но не нужен последующие.

Решение здесь, такое:

Нужно всего лишь шаблон, который определял наличие "\" в середине строки т.е. если "\" есть, то нам это поле не нужно.

Проблема в том, что такой шаблон не работает *[!\]*.
По сути он вроде бы означает "любые_символы не_\ любые_символы"

Но результат не верен. С этим мне и нужно разобраться.
Не было бы Гейтса, не было бы нас!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 28.06.2005 (Вт) 7:07

Шаблон для LIKE гораздо менее мощный, чем регулярные выражения. Так что ищи другой путь, имхо.
Например, сделай функцию, которая считает количество слэшей, вставь её в запрос и смотри, когда она возвращает 1.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Al Khamid
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 274
Зарегистрирован: 11.02.2004 (Ср) 10:00
Откуда: Москва, Ховрино

Сообщение Al Khamid » 28.06.2005 (Вт) 12:11

Последний раз редактировалось Al Khamid 07.12.2007 (Пт) 19:06, всего редактировалось 1 раз.

Gloom
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 200
Зарегистрирован: 23.11.2004 (Вт) 15:57
Откуда: СПб

Сообщение Gloom » 28.06.2005 (Вт) 16:17

Код: Выделить всё
SELECT * FROM table1 WHERE path LIKE "Child1\*" AND path Not Like "Child1\*\*"

Prickly
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 82
Зарегистрирован: 07.10.2004 (Чт) 18:44
Откуда: From Russia

Сообщение Prickly » 28.06.2005 (Вт) 20:37

Работает.
Спасибо
Не было бы Гейтса, не было бы нас!


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

    TopList