我正在閱讀oracle的基礎知識,並遇到了奇怪的聲明。我不知道它有多真實。oracle中字符串比較的問題
聲明說
「字符串值 '2' 比字符串值 '100' 以上。字符 '1' 小於字符 '10'。」
請拋出一些在上述主題上點亮。我知道內部比較必須使用ASCII值進行。我正在尋求一些合理的解釋。
我正在閱讀oracle的基礎知識,並遇到了奇怪的聲明。我不知道它有多真實。oracle中字符串比較的問題
聲明說
「字符串值 '2' 比字符串值 '100' 以上。字符 '1' 小於字符 '10'。」
請拋出一些在上述主題上點亮。我知道內部比較必須使用ASCII值進行。我正在尋求一些合理的解釋。
這意味着,作爲字符串處理號碼不在數字順序排序但詞法順序,以同樣的方式字在字典中排序。也就是說,從左側逐個比較字符。
在您的第一個示例中,「2」大於「100」,因爲'2'與'1'比較並且發現較大。將它與字典中「C」和「BAA」的排序進行比較。
在第二個例子中,「1」小於「10」,因爲「1」與「10」左側的「1」完全匹配,但「10」後面的字符匹配。所以它更大。再次,將其與字典中「B」和「BA」的排序進行比較。
你完全正確地認爲它們是按ASCII值排序的 - 這被稱爲字母排序。字符串不是按數字值排序,而是按文本排序。
字母排序按位置比較值的位置。當比較字符串'2'和字符串'100'時,它通過比較'2'和'1'開始。 '2'在'1'('2'的ASCII值大於'1'的ASCII值)之後出現,所以比較停止,所以'100'將以字母排序在'2'之前列出。這與將'b'與'azz'進行比較完全等價 - 因爲'a'在'b'之前,'azz'將在'b'之前排序。
您的文字指出了這一點,因爲這種行爲雖然可以理解是非直觀的。你會期望在'2'之後排序'100',因爲2 < 100,但那不是那種。