如何解决找出使用LIKE查询时匹配的模式?
如果我要执行一堆带有LIKE语句的普通查询。是否可以返回哪个搜索词实际上导致了该行的返回?
所以,如果我跑了:
select cand_id
FROM cand_kw
WHERE client_id='client'
AND ( ( UPPER(kw) LIKE '%ANDREW%' AND UPPER(kw) LIKE '%POSTINGS%' )
OR ( UPPER(kw) LIKE '%BRET%' )
OR ( UPPER(kw) LIKE '%TIM%' )) ) )
它返回了一些结果行,有没有一种方法可以标记该行中哪个词实际上匹配?因此,如果导致此行返回的原因是'%ANDREW%',则可以显示该信息。
数据库引擎是oracle 9i,我意识到这通常是一个类似于全文搜索的功能,该数据库未设置为要处理,因此我只是在尝试伪造它。
解决方法
这有点棘手,因为可能会匹配多个关键字。您可以在CASE
子句中使用SELECT
表达式,但随后只会得到第一个匹配的关键字。
另一种方法是将每个关键字放在单独的行上,使用联接过滤原始表,然后聚合匹配关键字的列表。
所以:
SELECT c.cand_id,LISTAGG(k.kw,',') WITHIN GROUP (ORDER BY k.kw) matches
FROM cand_kw c
INNER JOIN (
SELECT 'ANDREW' kw FROM DUAL
UNION ALL SELECT 'POSTINGS' FROM DUAL
UNION ALL SELECT 'BRET' FROM DUAL
UNION ALL SELECT 'TIM' FROM DUAL
) k ON c.kw LIKE '%' || k.kw || '%'
GROUP BY c.cand_id
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。