【问题标题】:TSQL Comparing Strings/Varchars while Ignoring Case/Capitalization? [duplicate]TSQL在忽略大小写/大写的同时比较字符串/ Varchars? [复制]
【发布时间】:2011-10-06 06:31:30
【问题描述】:

我正在处理一个查询,以便我可以将从文件名读取的单词与代码中已经预定义的另一个单词进行比较,并为其分配一个数值。

但是,我遇到的问题是试图忽略名称的大小写,因为名称是从文件中读取的,大小写可能会更改,然后与我设置的预定义值不匹配。除了将所有可能的值放在案例中之外,还有什么简单的方法可以忽略大写?

代码片段:

NumberVal = CASE   
              WHEN Name = 'Bond' OR Name = 'BOND' OR Name = 'bond' THEN 16   
            END

【问题讨论】:

  • SQL-Server 默认不区分大小写吗?您是否修改了该设置?
  • @Yoda,SQL Server 区分大小写,具体取决于对数据设置的排序规则。
  • 不,请不要为此使用UPPER。这肯定比通过COLLATE 指定显式排序规则的正确方法效率低,有时更容易出错。查找列的排序规则并使用不区分大小写的版本。只需将排序规则名称中的_CS 更改为_CI。所以Latin1_General_100_CS_AS变成Latin1_General_100_CI_AS,这个谓词变成WHEN [Name] COLLATE Latin1_General_100_CI_AS = 'Bond' THEN 16。详情请参阅my answer to this related question,尤其是第 1 点和第 9 点。
  • @Matt 从技术上讲,不,可以使用您选择的任何排序规则安装 SQL Server。并且有几个级别可以控制不同的事物并且可以有不同的排序规则。但在实际层面上,美国英语操作系统上实例的默认排序规则是SQL_Latin1_General_CP1_CI_AS,不区分大小写。实例的排序规则控制实例级对象,例如登录,是tempdb 的排序规则,并且是未指定排序规则的新数据库的默认值。然后,数据库的排序规则是未指定排序规则的新列的默认值。 collations.info

标签: sql sql-server tsql sql-server-2008 collation


【解决方案1】:

SQL Server 默认忽略大小写,所以有人更改了设置,而你不知道

如果现在区分大小写,只需使用 UPPER 并忘记排序规则

CASE   
  WHEN UPPER(Name) = 'BOND' THEN 16   
 END

【讨论】:

  • 不,请不要为此使用UPPER。这肯定比通过COLLATE 指定显式排序规则的正确方法效率低,有时更容易出错。查找列的排序规则并使用不区分大小写的版本。只需将排序规则名称中的_CS 更改为_CI。所以Latin1_General_100_CS_AS变成Latin1_General_100_CI_AS,这个谓词变成WHEN [Name] COLLATE Latin1_General_100_CI_AS = 'Bond' THEN 16。详情请参阅my answer to this related question,尤其是第 1 点和第 9 点。
猜你喜欢
  • 2016-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-16
  • 1970-01-01
相关资源
最近更新 更多