我正在阅读oracle的基础知识并且遇到了奇怪的声明。我不知道它是多么真实。
声明说
“字符串值'2'大于字符串值'100'。字符 '1'小于字符'10'。 “
请注意以上话题。我知道必须使用ASCII值进行内部比较。我正在寻求一些合理的解释。
答案 0 :(得分:5)
这意味着被视为字符串的数字不按数字顺序排序,而是按词汇顺序排序,这与单词在字典中排序的方式相同。也就是说,从左侧一次比较一个字符。
在您的第一个示例中,“2”大于“100”,因为“2”与“1”进行比较并发现更大。将其与字典中“C”和“BAA”的顺序进行比较。
在第二个例子中,“1”小于“10”,因为“1”与“10”左侧的“1”完全匹配,但“10”在匹配后有字符。因此它更大。再次,将其与字典中“B”和“BA”的排序进行比较。
答案 1 :(得分:0)
假设它们按ASCII值排序,您完全正确 - 这称为字母排序。字符串不是作为数字值排序,而是作为文本排序。
字母排序按位置比较值。将字符串'2'与字符串'100'进行比较时,首先将'2'与'1'进行比较。 “2”在“1”之后(ASCII值“2”大于“1”的ASCII值)按字母顺序排列,因此比较停止,因此“100”将按字母排序列在“2”之前。这与将'b'与'azz'进行比较完全相同 - 因为'a'在'b'之前,'azz'将在'b'之前排序。
您的文字指出了这一点,因为这种行为虽然可以理解,但却不直观。从2< 2< 2'开始,你会期望在'2'之后放置'100'。 100,但事实并非如此。