与使用通配符百分比的正确值一样

时间:2013-03-08 17:34:53

标签: sql sql-server sql-like

我需要搜索国家/地区ID,我遇到了一个问题,例如,让我们把这个国家带到“玻利维亚”。

Country表格有“CountryName”和“Alternative Names”

以“玻利维亚”为例。

IdCountry  Name                             Code  AlternateNames
---------- -------------------------------- ----- ---------------------------
29         Bolivia, Plurinational State Of  BO    Bolivia, Bolivien, Bolivie

这是我创建的查询:

SELECT cou.CountryID 
FROM Doppler2011.dbo.Country cou 
WHERE (cou.AlternateNames IS NOT NULL AND 'Bolivia' like '%'+cou.AlternateNames+'%') 
        OR 'Bolivia' like cou.Name

如您所见,我需要右侧的cou.AlternateNames来匹配国家名称和一些替代名称,对于名称与{{1}相同的国家/地区查询有效,但问题在于那些必须与AlternateNames匹配的问题

任何人都可以帮助我吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

你应该在另一个术语上使用通配符,如下所示

SELECT cou.CountryID 
        FROM Doppler2011.dbo.Country cou 
        WHERE cou.AlternateName like '%Bolivia%' OR cou.Name like 'Bolivia' 

答案 1 :(得分:1)

你的where子句基本上是倒退的。 你通常会说:

COLUMN_NAME like '%string_to_match%'

答案 2 :(得分:1)

根据您的实际结构,这里有一些想法。

如果AlternateName作为逗号分隔列表存储在一个列值上,并且Name始终是AlternateName中列表的第一个值,那么您可以使用Ateski's answer }

如果它不是列表中的第一项,那么您需要在评论中关注@ AaronBertrand的建议:

SELECT cou.CountryID 
    FROM Doppler2011.dbo.Country cou 
    WHERE ',' + cou.AlternateName + ',' LIKE '%,Bolivia,%' 
      OR cou.Name ='Bolivia';

最后,如果您可以稍微重新构建一下您的结构,以便列出可能的国家/地区名称,那么您可以提出类似的结果:

http://sqlfiddle.com/#!3/6d3c8/1

只是另一种观点。 Ateski的解决方案非常有效且很好。