【问题标题】:How to compare 2 strings in SQL server which should not be true if any case difference如何比较 SQL Server 中的 2 个字符串,如果有任何大小写差异,则不应该为真
【发布时间】:2020-10-22 16:34:34
【问题描述】:

尝试比较两个字符串,如果两个字符串都匹配则应该返回 true,否则应该返回 false

在下面的示例中,由于大小写,两个字符串都不匹配。

有没有办法在 SQL Server 2016 中实现这一点 示例:

Declare @str1 varchar (100) ='Yes'
Declare @str2 varchar (100) ='YES'
    Select 
         Case When @str1=@str2 then 'same'
         Else 'Not same'
    END

预期结果:不一样

【问题讨论】:

  • 使用区分大小写的排序规则

标签: sql asp.net sql-server tsql stored-procedures


【解决方案1】:

您可以通过使用区分大小写的排序规则来做到这一点,例如Latin1_General_CS_AS。 您可以为数据库设置默认排序规则,但也可以在特定查询中应用排序规则。在你的情况下:

Declare @str1 varchar (100) ='Yes'
Declare @str2 varchar (100) ='YES'
    Select 
         Case When @str1 COLLATE Latin1_General_CS_AS = @str2 COLLATE Latin1_General_CS_AS then 'same'
         Else 'Not same'
    END

【讨论】:

  • 确实(唉)不可能声明变量的排序规则,因此每次使用变量时都必须提及排序规则:/
【解决方案2】:

另一种选择是

Declare @str1 varchar (100) ='Yes'
Declare @str2 varchar (100) ='YES'

    Select 
         Case When HASHBYTES( 'sha1', @str1)=HASHBYTES('sha1', @str2) then 'same'
         Else 'Not same'
    END

SQL Case Sensitive String Compare

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    • 2017-09-04
    • 1970-01-01
    相关资源
    最近更新 更多