我正在寻找一些SQL varchar比较函数,比如C#string.compare(我们现在可以忽略大小写,当字符表达式相同时应返回零,当它们不同时应返回非零表达式)
基本上我在一个表中有一些字母数字列需要在另一个表中验证。
我无法从(查询)中选择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,差异是2个字符表达式soundex的差异,差异= 4表示差异最小)
我可以写一个游戏来为每行中的每个字母数字字符进行ascii比较,但我想知道是否有其他方法可以做到这一点?
答案 0 :(得分:3)
我们现在可以忽略大小写,当字符表达式相同时应该返回零,而当它们不同时应该返回非零表达式
如果这就是你想要的,你可以使用它:
CASE WHEN 'a' = 'b' THEN 0 ELSE 1 END
请注意,当任一参数为NULL时,此表达式返回1。这可能不是你想要的。如果任一参数为NULL,则可以使用以下命令返回NULL:
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
答案 1 :(得分:1)
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