按字符串sql中的最大匹配顺序选择结果

阿努拉格

我在表tblCountry中有一个“国家/地区”字符串列,例如“印度,澳大利亚,美国,英国”。现在,无论提供什么序列(例如“美国,德国,英国,印度,俄罗斯”),我都必须基于空间拆分字符串,然后显示“列国家”值中甚至存在单个国家的所有国家/地区的结果。到目前为止,我已经通过下面的查询实现了。现在最困难的部分是我必须首先显示具有最大列值匹配项的结果。

例如,如果下面是列值:

'India, Austrailia, US, Italy'
'India, Malaysia, Austrailia, US, UK'
'UK, Austrailia, France, Korea, India'
'China, India, US, UK'

并且输入字符串为“ Austrailia,UK,印度,韩国,德国”,则结果应为最大匹配,如下所示位于顶部:输出相关性最高的国家/地区,如上所示,相关性如下所示:

 'UK, Austrailia, France, Korea, India'   
 'India, Malaysia, Austrailia, US, UK'   
 'India, Austrailia, US, Italy'  
 'China, India, US, Brazil'


declare @matchCount int = 0;

SET @matchCount = (SELECT count(Item)  
        FROM dbo.SplitCountry('Austrailia, UK, India, Korea, Germany' , ',') 
        where Countries like '%'+Item+'%')

SELECT Countries, CASE 
WHEN @matchCount >0 THEN @matchCount 
     ELSE 0
  FROM tblCountry

我使用了一个函数来分割字符串'SplitCountry'。我也不能在这里使用全文

阿努拉格

最后进行了大量研究,我为自己的问题找到了简单的解决方案。下面的查询对我来说是完美的

DECLARE @patterns TABLE(pattern VARCHAR(20));

插入@模式值('%india%'),('%france%'),('%US%'),('%UK%')

;通过CTEORD AS(SELECT a。*,ROW_NUMBER()Over(按国家/地区划分按p.pattern划分)AS RN来自国家a JOIN @patterns p ON(a.country LIKE p.pattern))

从CTEORD组中按国家/地区选择RN desc,选择MAX(RN)作为RN,国家

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章