SQL字符串比较如何工作?

时间:2013-12-16 08:28:00

标签: sql sql-server-2005

我有一个像

这样的条件
IF(LEN(@strData) > 3 OR @strData > '255') BEGIN     
// Some Condition
END

这是用sp写的,我遇到过某人写的。 如果LEN> 1,则第一条件是明确的。 3这种情况会成真。

> '255'是什么意思?

我传递了随机值,如

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

我不明白它的行为方式。 这个查询没有被评论为什么其他开发人员写了那行。

在SQL字符串比较中它将如何工作.. 请有人说清楚。

更新:

出于某种目的,我在C#中需要相同的条件

2 个答案:

答案 0 :(得分:3)

在SQL Server中,字符串比较按字母顺序完成。那就是“allan”大于“alan”,因为字母“alan”出现在“allan”之前。因此,在进行字符串比较时,数字被视为相同,它们按字母顺序排列......因此,'2'大于'12'...令人惊讶,是吗?那么,从左到右进行字母串比较,因此'2'大于'12'。 现在,在C#中,它的行为与sql完全没有区别。为了加强你可能有的任何疑虑......你可以轻松地测试它......

SQL

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

C#Console App

        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");

希望你有意义

答案 1 :(得分:0)

它是两个字符串之间的简单联合。

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'&gt;'255'”      ASCII / utf-8字母'a'大于字符'2',因此它在第一个字符比较时返回true,