Sql server 对SQL Server中的默认字符串比较选项感到困惑

Sql server 对SQL Server中的默认字符串比较选项感到困惑,sql-server,sql-server-2008,tsql,Sql Server,Sql Server 2008,Tsql,我完全搞不懂Microsoft SQL Server中使用的默认字符串比较方法。到目前为止,我一直在使用UPPER()和LOWER()函数在Microsoft SQL Server上执行任何字符串比较 但是,我们知道默认情况下Microsoft SQL Server不区分大小写,我们需要在安装Microsoft SQL Server时更改排序规则,使其区分大小写。然而,如果是这种情况,那么UPPER和LOWER()函数的用途是什么。正如您所发现的,UPPER和LOWER仅在应用区分大小写的排序规

我完全搞不懂Microsoft SQL Server中使用的默认字符串比较方法。到目前为止,我一直在使用
UPPER(
)和
LOWER()
函数在Microsoft SQL Server上执行任何字符串比较


但是,我们知道默认情况下Microsoft SQL Server不区分大小写,我们需要在安装Microsoft SQL Server时更改排序规则,使其区分大小写。然而,如果是这种情况,那么UPPER和
LOWER()函数的用途是什么。

正如您所发现的,
UPPER和
LOWER
仅在应用区分大小写的排序规则时用于比较,但这并不意味着它们没有用处

例如,
Upper
Lower
可用于格式化结果

select upper(LicencePlate) from cars
通过应用于表设计中的列或特定比较,您可以在不重新安装的情况下应用排序规则,例如:

if 'a' = 'A' collate latin1_general_cs_as
    select '1'
else
    select '2'

if 'a' = 'A' collate latin1_general_ci_as
    select '3'
else
    select '4'  

如果要比较区分大小写的字符串,请参见

IF @STR1 COLLATE Latin1_General_CS_AS <> @STR2 COLLATE Latin1_General_CS_AS
    PRINT 'NOT MATCH'
IF@STR1 COLLATE Latin1\u General\u CS\u AS@STR2 COLLATE Latin1\u General\u CS\u AS
打印“不匹配”

我使用它们将文本格式化为大写或小写,或者有时我会使用时髦的标题大小写。这可能是一种很好的做法。是什么让你认为比较是此类函数(在本语言或任何语言中)的唯一用法?