有一段时间我认为,为了正确评估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()
是否必要?
感谢您的帮助。
答案 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