這是一個愚蠢的問題,但請幫助我擺脫循環。SQL比較數字字符串
SELECT *
FROM TABLE_NAME T1
WHERE '10000' > '2'
爲什麼上面的條件是錯誤的? 我知道我可以將它轉換爲數字,但我不知道爲什麼上述條件不成立。非常感謝你。
這是一個愚蠢的問題,但請幫助我擺脫循環。SQL比較數字字符串
SELECT *
FROM TABLE_NAME T1
WHERE '10000' > '2'
爲什麼上面的條件是錯誤的? 我知道我可以將它轉換爲數字,但我不知道爲什麼上述條件不成立。非常感謝你。
如果您嘗試
WHERE 'A' < 'B'
它可以讓你真正
如果您嘗試
WHERE 'AAAAAB' > 'AAAAAA'
返回true,因爲B比A
更大出於同樣的原因WHERE '10000' > '2'
返回false
條件是錯誤的,因爲值被比較爲字符串,而不是數字。原因如下:
WHERE 'A0000' > 'B'
計算結果爲false。
道德?只對字符串和日期常量使用單引號。不要爲數字使用單引號。
謝謝你的回覆,但我還有一個問題。那麼爲什麼'A0000'<'B'返回TRUE?我想知道他們是如何相互比較的。 –
@PhamNgocVinh。 。 。因爲比較是按字母順序排列的,就像詞典中的條目一樣。 –
數字類型和字符串的處理方式不同。時相比
例如)
1 < 2
是TRUE
'1000'>'2'
是FALSE
的字符類型改變爲數字類型。
使用49而不是 '1' 和 使用50代替的 '2'
結果49 > 50
= FALSE
如果 '1000'> '1',是TRUE
看到ASCII碼。
只是想簡單。就這一切而言,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值,程序首先會檢查您的第一個索引值,然後是第二個...直到結束。
謝謝,但是再次。爲什麼'30000'<'2'是假的。我認爲他們可能比較第一個字符,然後忽略其餘的? –
比較3的'3000'的第一個字符和'2'的第一個字符2,現在3 <2由於2的ASCII碼小於3而返回錯誤 – iamdeowanshi