我正在阅读 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”,但排序并非如此。