代码之家  ›  专栏  ›  技术社区  ›  ram

SQL Server中的varchar比较

  •  2
  • ram  · 技术社区  · 15 年前

    我正在寻找一些SQL varchar比较函数,如c string.compare(我们现在可以忽略case,字符表达式相同时应返回零,字符表达式不同时应返回非零表达式)

    基本上,我在一个表中有一些字母数字列,需要在另一个表中进行验证。

    我不能从(查询)中选择a.col1-b.col1,因为“-”运算符不能应用于字符表达式

    我无法将表达式强制转换为int(然后执行差/减),因为它失败了

    select cast ('ASXT000R' as int)
    Conversion failed when converting varchar 'ASXT000R'  to int 
    

    Soundex 不会这样做,因为Soundex对于2个相似的字符串是相同的

    Difference 不会这样做的 select difference('abc','ABC') = 4 as per msdn ,difference是两个字符表达式的soundex之间的差异,difference=4表示差异最小)

    我可以写一个光标来对每一行中的每个字母数字字符进行ASCII比较,但是我想知道是否还有其他方法可以做到这一点?

    2 回复  |  直到 9 年前
        1
  •  3
  •   Mark Byers    15 年前

    我们现在可以忽略大小写,字符表达式相同时返回零,字符表达式不同时返回非零。

    如果这就是你想要的,你可以用这个:

    CASE WHEN 'a' = 'b' THEN 0 ELSE 1 END
    

    请注意,当其中一个参数为空时,此表达式返回1。这可能不是你想要的。如果其中一个参数为空,则可以使用以下命令返回空值:

    CASE WHEN 'a' = 'b' THEN 0
         WHEN 'a' <> 'b' THEN 1
    END
    

    如果您希望负值和正值取决于哪个比较值“较大”,则可以使用它:

    CASE WHEN 'a' < 'b' THEN -1 
         WHEN 'a' = 'b' THEN 0
         WHEN 'a' > 'b' THEN 1
    END
    
        2
  •  1
  •   Code Maverick Ashish Gupta    9 年前
    select case when a.col1 = b.col1 then 0 else 1 end from a join b on a.id = b.id
    

    select case when lower(a.col1) = lower(b.col1) then 0 else 1 end from a join b on a.id = b.id