2012-07-06 94 views
3

我正在閱讀oracle的基礎知識,並遇到了奇怪的聲明。我不知道它有多真實。oracle中字符串比較的問題

聲明說

「字符串值 '2' 比字符串值 '100' 以上。字符 '1' 小於字符 '10'。」

請拋出一些在上述主題上點亮。我知道內部比較必須使用ASCII值進行。我正在尋求一些合理的解釋。

回答

5

這意味着,作爲字符串處理號碼不在數字順序排序詞法順序,以同樣的方式字在字典中排序。也就是說,從左側逐個比較字符。

在您的第一個示例中,「2」大於「100」,因爲'2'與'1'比較並且發現較大。將它與字典中「C」和「BAA」的排序進行比較。

在第二個例子中,「1」小於「10」,因爲「1」與「10」左側的「1」完全匹配,但「10」後面的字符匹配。所以它更大。再次,將其與字典中「B」和「BA」的排序進行比較。

0

你完全正確地認爲它們是按ASCII值排序的 - 這被稱爲字母排序。字符串不是按數字值排序,而是按文本排序。

字母排序按位置比較值的位置。當比較字符串'2'和字符串'100'時,它通過比較'2'和'1'開始。 '2'在'1'('2'的ASCII值大於'1'的ASCII值)之後出現,所以比較停止,所以'100'將以字母排序在'2'之前列出。這與將'b'與'azz'進行比較完全等價 - 因爲'a'在'b'之前,'azz'將在'b'之前排序。

您的文字指出了這一點,因爲這種行爲雖然可以理解是非直觀的。你會期望在'2'之後排序'100',因爲2 < 100,但那不是那種。