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

Posted

技术标签:

【中文标题】对 SQL Server 中的默认字符串比较选项感到困惑【英文标题】:Confused about default string comparison option in SQL Server 【发布时间】:2013-08-21 09:31:31 【问题描述】:

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

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

【问题讨论】:

我使用它们将文本格式化为大写或小写,或者有时我会变得时髦并使用标题大小写。 SQL Case Sensitive String Compare的可能重复 这只是一个好习惯。 是什么让您认为 comparisons 是此类函数的唯一用例(以这种语言或任何语言)? 【参考方案1】:

如果您想比较区分大小写的字符串,这可能是您要查找的语法

IF @STR1 COLLATE Latin1_General_CS_AS <> @STR2 COLLATE Latin1_General_CS_AS
    PRINT 'NOT MATCH'

【讨论】:

【参考方案2】:

正如您所发现的,upperlower 仅在应用了区分大小写的排序规则时用于比较,但这并不意味着它们毫无用处。

例如,UpperLower 可用于格式化结果。

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'  

见http://technet.microsoft.com/en-us/library/aa258272(v=sql.80).aspx

【讨论】:

以上是关于对 SQL Server 中的默认字符串比较选项感到困惑的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 中的 XML 比较(字符串)

sql server自定义排序

Confluence 6 SQL Server 输入你的数据库细节

将日期字符串与 SQL Server 中的日期时间进行比较?

Confluence 6 SQL Server 输入你的数据库细节

如何安装sqlserver2012