2017-10-05 81 views
0

這是一個愚蠢的問題,但請幫助我擺脫循環。SQL比較數字字符串

SELECT * 

FROM TABLE_NAME T1 

WHERE '10000' > '2' 

爲什麼上面的條件是錯誤的? 我知道我可以將它轉換爲數字,但我不知道爲什麼上述條件不成立。非常感謝你。

回答

2

如果您嘗試

WHERE 'A' < 'B' 

它可以讓你真正

如果您嘗試

WHERE 'AAAAAB' > 'AAAAAA' 

返回true,因爲B比A

更大出於同樣的原因WHERE '10000' > '2'返回false

+0

謝謝,但是再次。爲什麼'30000'<'2'是假的。我認爲他們可能比較第一個字符,然後忽略其餘的? –

+0

比較3的'3000'的第一個字符和'2'的第一個字符2,現在3 <2由於2的ASCII碼小於3而返回錯誤 – iamdeowanshi

2

條件是錯誤的,因爲值被比較爲字符串,而不是數字。原因如下:

WHERE 'A0000' > 'B' 

計算結果爲false。

道德?只對字符串和日期常量使用單引號。不要爲數字使用單引號。

+0

謝謝你的回覆,但我還有一個問題。那麼爲什麼'A0000'<'B'返回TRUE?我想知道他們是如何相互比較的。 –

+0

@PhamNgocVinh。 。 。因爲比較是按字母順序排列的,就像詞典中的條目一樣。 –

1

數字類型和字符串的處理方式不同。時相比

例如)

1 < 2是TRUE

'1000'>'2'是FALSE

的字符類型改變爲數字類型。

使用49而不是 '1' 和 使用50代替的 '2'

結果49 > 50 = FALSE

如果 '1000'> '1',是TRUE

看到ASCII碼。

1

只是想簡單。就這一切而言,Char類型具有ascii系統或charset整理的值。

只要例如:

Declare @a char(1)='A',@b char(1)=B,@c char(1)='C' 

值爲1 b值爲爲2 C值是3

這只是按字母順序對於SQL Server對char基於變量。

這意味着如果您比較char,nchar,varchar或nvarchar值,程序首先會檢查您的第一個索引值,然後是第二個...直到結束。