这些是要排序的字段(crane_no)值
QC11 QC10
QC9
我尝试了以下查询:
select * from table order by crane_no DESC
但是查询结果没有给出订单,因为该字段与启动和编号混合(例如: QC12 )。
我得到以下查询的以下结果:
QC9
QC11
QC10
我希望结果符合要求(QC9,QC10,QC11)。感谢
答案 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'订购得当;它也会处理空值。