UPPER()和LOWER()不是必需的?

时间:2012-02-03 03:11:39

标签: sql sql-server-2008 sql-server-2005 case-sensitive

有一段时间我认为,为了正确评估WHERE条件,我需要考虑区分大小写。如果案件无关紧要,我会使用UPPER()LOWER()。但是,我发现以下查询产生相同的结果。

SELECT * FROM ATable WHERE UPPER(part) = 'SOMEPARTNAME'
SELECT * FROM ATable WHERE part        = 'SOMEPARTNAME'
SELECT * FROM ATable WHERE part        = 'somepartname'

SQL Case Sensitive String Compare解释了使用区分大小写的排序规则。这是强制区分大小写的唯一方法吗?此外,如果您需要不区分大小写的排序规则,那么UPPER()LOWER()是否必要?

感谢您的帮助。

2 个答案:

答案 0 :(得分:5)

不区分大小写的排序规则的常见SQL Server默认值意味着在比较字符串时不需要UPPER()LOWER()

实际上是一个表达式,如

SELECT * FROM Table WHERE UPPER(part) = 'SOMEPARTNAME' 
由于应用于比较左侧part列的功能,

也是不可攻击的,即不会使用可用索引。

答案 1 :(得分:0)

以下此查询会生成CASE SENSITIVE搜索:

SELECT Column1
FROM Table1
WHERE Column1 COLLATE Latin1_General_CS_AS = 'casesearch'

UPPER()LOWER()只是更改字母大小写的函数,因此如果您不区分大小写整理,则只能在SELECT关键字后使用:

SELECT UPPER('qwerty'), LOWER('Dog')

returns
QWERTY, dog