Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 与带有通配符百分比的正确值类似_Sql_Sql Server_Sql Like - Fatal编程技术网

Sql 与带有通配符百分比的正确值类似

Sql 与带有通配符百分比的正确值类似,sql,sql-server,sql-like,Sql,Sql Server,Sql Like,我需要搜索国家ID,我遇到了一个问题,例如,让我们以玻利维亚为例 Country表包含CountryName和备选名称 以玻利维亚为例 IdCountry Name Code AlternateNames ---------- -------------------------------- ----- --------------------------- 29 Bolivia, Plurinational State

我需要搜索国家ID,我遇到了一个问题,例如,让我们以玻利维亚为例

Country表包含CountryName和备选名称

以玻利维亚为例

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是否作为列值存储在一起?