2012-07-06 99 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,但那不是那种。