Создание поискового запроса с подстановочным знаком в SQL2

У меня есть запрос на поиск с использованием подстановочного знака.

Я создал следующий запрос

SELECT * FROM [nt:base] AS p WHERE
ISDESCENDANTNODE(p, [/home/users/ldap/2]) AND
p.[sling:resourceType] = 'cq/security/components/profile' AND 
Contains (p.memberOf, 'SUG-pilot-anna')

и он работает так, как ожидалось. Задачей этого запроса является поиск пользователей, входящих в определенную группу ldap.

Потому что есть много работы по поиску каждой отдельной группы, например

SUG-pilot-anna
SUG-pilot-berta
SUG-pilot-ceta

, было бы проще и эффективнее использовать подстановочный знак. Согласно серверным документам, оператор LIKE поддерживается SQL2.

Мой вопрос: как выглядит запрос с подстановочным знаком?

Спасибо за вашу помощь/идеи.


person Reporter    schedule 22.10.2014    source источник


Ответы (1)


Вы можете использовать подстановочный знак % и запросить свои требования.

SELECT * FROM [nt:base] AS p WHERE
ISDESCENDANTNODE(p, [/home/users/ldap/2]) AND
p.[sling:resourceType] = 'cq/security/components/profile' AND 
p.memberOf LIKE 'SUG-pilot-%'

Это вернет список пользователей, принадлежащих к любому имени группы, начинающемуся с SUG-pilot-. «%» соответствует нулю или более символов, а «_» соответствует ровно одному символу.

Точный запрос, который работал в моем случае, был

SELECT * FROM [nt:base] AS p WHERE
ISDESCENDANTNODE(p, [/home/users/]) AND
p.[sling:resourceType] = 'cq/security/components/profile' AND 
p.memberOf LIKE '%de%'
person rakhi4110    schedule 22.10.2014
comment
Спасибо за Ваш ответ. Я протестировал его, и он сгенерировал пустой набор результатов по сравнению с первым запросом. - person Reporter; 23.10.2014
comment
Я не уверен ни в профиле ldap, который у вас есть, ни в свойстве memberOf, которое вы проверяете. Я попытался выполнить этот запрос для существующих свойств, и он работает. И содержит, и нравится дает мне тот же результат. Кстати, какую версию CQ5 вы используете @reporter? - person rakhi4110; 23.10.2014
comment
Я использую CQ5.4, и свойство 'memberOf' существует в узле профиля сохраненного пользователя ldap. Как я написал, мой запрос с «Contains()» действительно работает. - person Reporter; 23.10.2014
comment
Возможно LIKE не работает, потому что значения хранятся как тип String[]. - person Reporter; 23.10.2014
comment
я проверил LIKE для типа String[], и он все еще возвращает мне результаты. Не уверен, почему это не работает для вашего запроса. Можете ли вы попробовать "%SUG%" и посмотреть, есть ли какие-либо результаты? - person rakhi4110; 23.10.2014
comment
Когда я добавил знак процента в первую позицию, он сработал. Спасибо за помощь. - person Reporter; 24.10.2014