如何在Oracle中按字符串和数字混合使用字段进行排序?

时间:2017-01-31 05:34:25

标签: oracle

这些是要排序的字段(crane_no)值
QC11 QC10

QC9

我尝试了以下查询:

select * from table order by crane_no DESC

但是查询结果没有给出订单,因为该字段与启动和编号混合(例如: QC12 )。 我得到以下查询的以下结果:
QC9
QC11
QC10

我希望结果符合要求(QC9,QC10,QC11)。感谢

3 个答案:

答案 0 :(得分:1)

一种方法是使用SUBSTR()提取crane_no列的数字部分,强制转换为整数,然后按此值降序。

SELECT *
FROM yourTable
ORDER BY CAST(SUBSTR(crane_no, 3) AS INT) DESC

请注意,我在答案中假设crane_no中的每个条目都以固定宽度QC为前缀。如果没有,那么我们将不得不做更多的工作来识别数字组件。

答案 1 :(得分:1)

select ...
order by to_number( substr( crane_no,3 )) desc

答案 2 :(得分:1)

如果数据不是很大,我会使用正则表达式by order:

select 
  cran_no 
from your_table
order by 
  regexp_substr(cran_no, '^\D*') nulls first,
  to_number(regexp_substr(cran_no, '\d+'))

这会查找字符串中的数字,因此像QCC20',' DCDS90'订购得当;它也会处理空值。