【问题标题】:UPPER() and LOWER() not required?不需要 UPPER() 和 LOWER() 吗?
【发布时间】:2012-02-25 17:58:07
【问题描述】:

有一段时间我想,为了正确评估 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()

感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

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

    其实就是这样的表达式

    SELECT * FROM Table WHERE UPPER(part) = 'SOMEPARTNAME' 
    

    也是不可分割的,即不使用可用索引,因为函数应用于比较左侧的part 列。

    【讨论】:

      【解决方案2】:

      下面的这个查询产生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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-16
        相关资源
        最近更新 更多