【发布时间】: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