Sql 与带有通配符百分比的正确值类似
我需要搜索国家ID,我遇到了一个问题,例如,让我们以玻利维亚为例 Country表包含CountryName和备选名称 以玻利维亚为例Sql 与带有通配符百分比的正确值类似,sql,sql-server,sql-like,Sql,Sql Server,Sql Like,我需要搜索国家ID,我遇到了一个问题,例如,让我们以玻利维亚为例 Country表包含CountryName和备选名称 以玻利维亚为例 IdCountry Name Code AlternateNames ---------- -------------------------------- ----- --------------------------- 29 Bolivia, Plurinational State
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
如您所见,我需要like右侧的cou.alternateName将国家名称与一些备选名称相匹配,对于名称与cou.name相同的国家,查询是有效的,但问题在于那些必须与alternateName匹配的国家
有人能帮我吗
谢谢 你应该在另一个术语上使用威尔卡,就像这样
SELECT cou.CountryID
FROM Doppler2011.dbo.Country cou
WHERE cou.AlternateName like '%Bolivia%' OR cou.Name like 'Bolivia'
你应该在另一个术语上使用wilcards,就像这样
SELECT cou.CountryID
FROM Doppler2011.dbo.Country cou
WHERE cou.AlternateName like '%Bolivia%' OR cou.Name like 'Bolivia'
where子句基本上是向后的。 你通常会说:
COLUMN_NAME like '%string_to_match%'
where子句基本上是向后的。 你通常会说:
COLUMN_NAME like '%string_to_match%'
根据您的实际结构,这里有一些想法 如果AlternateName存储为一列值上的逗号分隔列表,并且名称始终是AlternateName中列表的第一个值,则可以使用 如果它不是列表中的第一项,那么您需要遵循@AaronBertrand在其评论中的建议:
SELECT cou.CountryID
FROM Doppler2011.dbo.Country cou
WHERE ',' + cou.AlternateName + ',' LIKE '%,Bolivia,%'
OR cou.Name ='Bolivia';
最后,如果你能重新设计一下你的结构,这样你就有了一个可能的国家名称的列表,你可以得出如下结论:
只是另一种观点。Ateski的解决方案是非常有效和好的。根据您的实际结构,这里有一些想法 如果AlternateName存储为一列值上的逗号分隔列表,并且名称始终是AlternateName中列表的第一个值,则可以使用 如果它不是列表中的第一项,那么您需要遵循@AaronBertrand在其评论中的建议:
SELECT cou.CountryID
FROM Doppler2011.dbo.Country cou
WHERE ',' + cou.AlternateName + ',' LIKE '%,Bolivia,%'
OR cou.Name ='Bolivia';
最后,如果你能重新设计一下你的结构,这样你就有了一个可能的国家名称的列表,你可以得出如下结论:
只是另一种观点。Ateski的解决方案是非常有效和好的。你是对的,我不知道为什么这个问题让我如此困惑。。。谢谢亚伦·伯特兰你说得对,我来编辑。马里亚诺,不客气。我不知道这怎么行。在这个例子中,替代物是玻利维亚、玻利维亚、玻利维亚的一种。例如“%玻利维亚%”将只匹配集合的第一个成员。不过,我很可能误解了这个问题。。。。除非它是存储在一列中的以逗号分隔的列表。如果它是以逗号分隔的列表,那么它应该是“,”+cou.AlternateName+“,”像“%,玻利维亚,%”-这样你只匹配完整的单词。你是对的,我不知道为什么这个查询让我如此困惑。。。谢谢亚伦·伯特兰你说得对,我来编辑。马里亚诺,不客气。我不知道这怎么行。在这个例子中,替代物是玻利维亚、玻利维亚、玻利维亚的一种。例如“%玻利维亚%”将只匹配集合的第一个成员。不过,我很可能误解了这个问题。。。。除非它是存储在一列中的逗号分隔列表。如果它是逗号分隔列表,那么它应该是“,”+cou.AlternateName+“,”像“%”,玻利维亚,“%”-这样您只能匹配全字。AlternateName是否作为列值存储在一起?AlternateName是否作为列值存储在一起?