Oracle - 像NUMBER一样对VARCHAR2字段进行排序 - 我找到了解决方案,需要对其进行解释

con*_*att 5 sql oracle sql-order-by

我有一个VARCHAR2列,我想用数字排序.它将包含数字的99%(或甚至100%)的时间.我环顾四周,发现了这个解决方案.引用来源:

请记住,我们的目标是按升序对supplier_id字段进行排序(基于其数值).为此,请尝试使用LPAD函数.

例如,

通过lpad(supplier_id,10)从供应商订单中选择*;

此SQL填充supplier_id字段的前面,空格最多为10个字符.现在,您的结果应按升序排序.

我用这个解决方案玩了一下,它似乎是workign(到目前为止),但它是如何工作的,任何人都能解释一下吗?

Adr*_*der 8

排序字符串/ varchar时,字段始终从左到右设置,就像您对普通单词进行排序一样.

这就是排序时遇到问题的原因

1
2
3
10
11
20
Run Code Online (Sandbox Code Playgroud)

将被分类为

1
10
11
2
20
3
Run Code Online (Sandbox Code Playgroud)

但是,现在如果你填充左边的值,你会有类似的东西

001
002
003
010
011
020
Run Code Online (Sandbox Code Playgroud)

哪个会正确排序