SQL Server中的varchar比较

时间:2010-05-22 17:57:26

标签: sql-server-2005 string comparison varchar string-comparison

我正在寻找一些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比较,但我想知道是否有其他方法可以做到这一点?

2 个答案:

答案 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