Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle-将VARCHAR2字段像数字一样排序-我找到了一个解决方案,需要解释一下吗_Sql_Oracle_Sql Order By - Fatal编程技术网

Sql Oracle-将VARCHAR2字段像数字一样排序-我找到了一个解决方案,需要解释一下吗

Sql Oracle-将VARCHAR2字段像数字一样排序-我找到了一个解决方案,需要解释一下吗,sql,oracle,sql-order-by,Sql,Oracle,Sql Order By,我有一个VARCHAR2列,我想对它进行数字排序。99%(甚至可能是100%)的时间它将包含数字。我环顾四周,发现了。引述资料来源: 请记住,我们的目标是按升序(基于其属性)对supplier_id字段进行排序 数值)。要做到这一点,请尝试使用 LPAD函数 比如说, 按从供应商订单中选择* lpad(供应商id,10) 这个SQL填充了 供应商id字段,最大空格为10 人物。现在,您的结果应该 按升序数字排序 秩序 我对这个解决方案做了一点研究,它似乎是有效的(到目前为止),但是有人能解释一下

我有一个VARCHAR2列,我想对它进行数字排序。99%(甚至可能是100%)的时间它将包含数字。我环顾四周,发现了。引述资料来源:

请记住,我们的目标是按升序(基于其属性)对supplier_id字段进行排序 数值)。要做到这一点,请尝试使用 LPAD函数

比如说,

按从供应商订单中选择* lpad(供应商id,10)

这个SQL填充了 供应商id字段,最大空格为10 人物。现在,您的结果应该 按升序数字排序 秩序


我对这个解决方案做了一点研究,它似乎是有效的(到目前为止),但是有人能解释一下它是如何工作的吗?

对字符串/varchar进行排序时,字段总是从左到右插入,就像对普通单词进行排序一样

这就是排序时出现问题的原因

1
2
3
10
11
20
这将被归类为

1
10
11
2
20
3
但是,现在如果你把这些值放在左边,你会得到

001
002
003
010
011
020

这将正确排序

从技术上讲,它将字段排序为整数,而不是数字。如果你有十进制数,那就不行了。