我需要搜索国家/地区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匹配的问题
任何人都可以帮助我吗?
谢谢!
答案 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的解决方案非常有效且很好。