2013-12-16 110 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,