【问题标题】:Creating a search query with wildcard in SQL2在 SQL2 中使用通配符创建搜索查询
【发布时间】:2014-10-22 15:57:53
【问题描述】:

我有一个使用通配符的搜索请求。

我创建了以下查询

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 支持。

我的问题是:使用通配符的查询看起来如何?

感谢您的帮助/建议。

【问题讨论】:

    标签: aem jcr jcr-sql2


    【解决方案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%'
    

    【讨论】:

    • 感谢您的回答。我对其进行了测试,与第一个查询相比,它生成了一个空结果集。
    • 不确定您拥有的 ldap 配置文件或您正在检查的 memberOf 属性。我尝试对现有属性执行上述查询并且它有效。 contains 和 like 都给了我相同的结果。顺便问一下,您使用的是哪个版本的 CQ5?@reporter?
    • 我正在使用 CQ5.4,并且属性“memberOf”确实存在于存储的 ldap 用户的配置文件节点中。当我使用“包含()”编写查询时确实有效。
    • 可能LIKE 不起作用,因为这些值存储为String[] 的类型。
    • 我检查了 LIKE 的 String[] 类型,它仍然返回我的结果。不知道为什么它不适用于您的查询。你可以试试 '%SUG%' 看看有没有结果?
    猜你喜欢
    • 2011-07-14
    • 2012-03-22
    • 2014-06-07
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多