代码之家  ›  专栏  ›  技术社区  ›  ilivewithian

如何在SQL Server中执行不区分重音的比较(e与_、_、_和_)?

  •  58
  • ilivewithian  · 技术社区  · 14 年前

    我想比较一下SQL中的两个varchar,一个类似于 Cafe 而另一个 Café SQL中是否有允许比较这两个值的方法?例如:

    SELECT *
    FROM Venue
    WHERE Name Like '%cafe%'
    

    所以如果有一个叫 Big Bobs Café Extraordinaire 它会包含在结果集中吗?

    4 回复  |  直到 7 年前
        1
  •  88
  •   Tomas Kubes    8 年前

    强制使用不区分重音的 collation

    如果要与表变量或临时表varchar列进行比较,还需要确保两边具有相同的排序规则,以避免错误或进一步的强制。

    并且因为常量值将具有数据库更新的排序规则:仅用于局部变量,不用于常量 不,即使那样也不行

    SELECT *
    FROM Venue
    WHERE
       Name COLLATE Latin1_general_CI_AI Like '%cafe%' COLLATE Latin1_general_CI_AI
    
        2
  •  44
  •   Mitch Wheat    10 年前

    通过应用特定的不区分重音的 collation 您的选择:

    SELECT * 
    FROM Venue 
    WHERE Name COLLATE Latin1_General_CI_AI Like '%cafe%' COLLATE Latin1_General_CI_AI
    

    ci代表“不区分大小写”,ai代表“不区分重音”。

        3
  •  3
  •   Jino Shaji    7 年前

    通过使用 Latin1_general_CI_AI

    在这里 AI 用于不区分重音和 AS 用于区分重音 IE 咖啡馆 咖啡馆 如果不区分重音,也是一样的。

    在下面的查询中 拉丁裔将军 可分为以下几部分。

    • latin1 使服务器使用字符集Latin1(基本上是ASCII)处理字符串。

    • CI 指定不区分大小写,因此“abc”等于“abc”。

    • 人工智能 指定不区分重音,因此“_¼”等于“U”。

    你的 查询 应如下所示:

    SELECT * FROM Venue WHERE Name COLLATE Latin1_general_CI_AI Like '%cafe%' COLLATE Latin1_general_CI_AI
    

    预期 结果 如下:

     Id  name
     1  Café
     2  Cafe
    
        4
  •  0
  •   Morteza Sefidi    7 年前

    如果“a”比较sql拉丁1_general_cp1_cs_as='a'比较sql拉丁1_general_cp1_cs_as 选择“是” 否则 选择“否”