【问题标题】:How to make WHERE CLAUSE case sensitive in SQL Server?如何在 SQL Server 中编写区分大小写的 WHERE CLAUSE?
【发布时间】:2021-05-09 03:21:45
【问题描述】:

好吧,这个让我难住了。我希望这不是愚蠢/显而易见的事情......

我正在尝试修复客户端数据库中的地址。我有一个函数,它接受一个字符串并返回一个字符串,其中每个单词的第一个字母都大写。
我试图只传递全部大写或全部小写的地址,但它返回的是整个数据集。前 3 列都是正确的,所以我无法弄清楚为什么 WHERE 不起作用。

这是我的代码。

    SELECT
        [ConvertFirstLettertoCapital]([Address]) AS [Standard],
        UPPER([Address]) AS [Upper],
        LOWER([Address]) AS [Lower],
        [Name],
        [Address],
        [Address 2],
        [City],
        [State]
    FROM [Address_List]
    WHERE
        [Address] = UPPER([Address]) OR
        [Address] = LOWER([Address])
  • MS SQL v15.0.1083.2
  • SSMS v15.0.18330

【问题讨论】:

  • 您的数据库/表设置为什么排序规则?如果您的排序规则是 MSSQL 中经常出现的不区分大小写的排序规则之一,那么您的 WHERE 子句将匹配整个列。
  • 如果数据库是不区分大小写(并且不区分重音)的排序规则,那么它将返回 Address 的每一行不是 NULL 值。 通常 数据库不区分大小写,仅在您真正需要时才使用区分大小写;看到你没有说它是在一个我怀疑它是。因此'my àddrêss' = 'MY ADDRESS'
  • @squillman 这是 'COLLATE SQL_Latin1_General_CP1_CI_AS' 我猜 CI = 不区分大小写

标签: sql sql-server where-clause case-sensitive sql-server-2019


【解决方案1】:

SQL Server 通常不区分大小写。所以'ABC'='abc'where clause 中为真。

要使where 子句区分大小写,您可以使用COLLATE。请尝试以下查询:

WHERE
        [Address] = UPPER([Address]) COLLATE SQL_Latin1_General_CP1_CS_AS
        OR
        [Address] = LOWER([Address]) COLLATE SQL_Latin1_General_CP1_CS_AS

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-29
    • 2012-05-13
    • 2011-09-27
    • 2014-08-19
    • 2016-09-30
    • 1970-01-01
    • 2010-11-30
    • 2015-07-23
    相关资源
    最近更新 更多