2013-12-16 75 views
2

我有一个条件写的SQL字符串比较如何工作?

IF(LEN(@strData) > 3 OR @strData > '255') BEGIN  
// Some Condition 
END 

这是写在我碰到过有人写了一个SP。 如果LEN> 3,那么首先条件是明确的。

但是> '255'这是什么意思?

我通过随机值一样

@strData = 'add' Result true 
@strData = 'a' Result true 
@strData = '12hhd' Result false 

我不明白它的行为有什么办法。 该查询没有评论为什么开发人员会写这一行。

在SQL字符串比较它将如何工作.. 请一定让我清楚。

UPDATE:

我需要在C#中相同的条件下为了某种目的

回答

3

在SQL Server中的字符串比较按字母顺序进行。这就是“阿兰”比“阿兰”还要大,因为按字母顺序的“阿兰”出现在“阿兰”之前。所以,在进行字符串比较时,数字的处理方式是一样的,它们按照字母顺序处理......所以'2'大于'12'......令人惊讶,是吧?那么,按字母顺序排列的字符串从左到右进行比较,因此'2'大于'12'。 现在,在C#中,它绝对没有区别,它的行为与sql完全相同。为了加强你可能拥有的任何可能出现的疑问......你可以很容易地测试它....

SQL

if '2' > '12' 
    select '2 > 12'; 
else 
    select '2 < 12'; 

C#控制台应用程序

 if ("2".CompareTo("12") < 0) 
      Console.WriteLine("2 is less than 12"); 
     else if ("2".CompareTo("12") > 0) 
      Console.WriteLine("2 is greater than 12"); 
     else 
      Console.WriteLine("2 is equal to 12"); 

希望这是有道理的,你

0

它是一个简单的两个字符串之间的comaprision。

SQL字符串比较的工作原理是这样:

Compare 'a' with '255' for '>' 

if length(a) < length(b) 
     pad a with spaces to be same length as b; 
for x = 0 to length(a) 
     if a(x) < b(x) return false; 
     if a(x) > b(x) return true; 
return false; 

在您的 “ 'A'> '255'” 的ASCII/UTF-8字母 'A' 是比字符'大的情况下2',所以它在第一个字符比较上返回true,