1

我需要搜索国家/地区 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在 like 的右侧将国家/地区的名称与一些替代名称相匹配,对于名称与 相同的国家/地区cou.Name,查询有效,但问题在于那些必须与 AlternateNames 匹配

谁能帮我?

谢谢!

4

3 回答 3

3

你应该有像这样的另一个术语的通配符

SELECT cou.CountryID 
        FROM Doppler2011.dbo.Country cou 
        WHERE cou.AlternateName like '%Bolivia%' OR cou.Name like 'Bolivia' 
于 2013-03-08T17:39:30.667 回答
1

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

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

如果它不是列表中的第一项,那么您需要遵循@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 的解决方案是完全有效且良好的。

于 2013-03-08T18:12:18.037 回答
1

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

COLUMN_NAME like '%string_to_match%'
于 2013-03-08T17:42:15.327 回答