3

我正在寻找一些 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 (根据 msdn,差异是 2 个字符表达式的 soundex 差异,差异 =4 意味着差异最小)

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

4

2 回答 2

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
于 2010-05-22T18:01:14.877 回答
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
于 2010-05-22T18:02:01.710 回答