【发布时间】: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 = 不区分大小写
-
没错,CI = 不区分大小写。 docs.microsoft.com/en-us/sql/relational-databases/collations/…
标签: sql sql-server where-clause case-sensitive sql-server-2019