对 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】:正如您所发现的,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'
见http://technet.microsoft.com/en-us/library/aa258272(v=sql.80).aspx
【讨论】:
以上是关于对 SQL Server 中的默认字符串比较选项感到困惑的主要内容,如果未能解决你的问题,请参考以下文章
Confluence 6 SQL Server 输入你的数据库细节
将日期字符串与 SQL Server 中的日期时间进行比较?