sql - SQL如何按字母顺序对带有数字的文本进行排序,然后按数字排序
问题描述
我有一个包含字母数字值的表。我想按字母顺序然后按数字顺序排列它们。我正在编辑问题以获得更多帮助...我只需要对字符串末尾的数字进行数字排序...
例如我想要这个
ControlName (column)
--------------------
VALVE 1
MAIN VALVE
VALVE 10
BOILER 2
VALVE 17
BOILER 1
VALVE 19
VALVE 2
要这样排序
ControlName (column)
----------------
BOILER 1
BOILER 2
MAIN VALVE
VALVE 1
VALVE 2
VALVE 10
VALVE 17
VALVE 19
什么是可以完成此任务的(轻量级)查询?
解决方案
由于现在存在问题,如果字符串中有超过 1 组数字部分,我们希望按最后一组数字进行排序。这段代码将做到这一点。如果只有一组数字或什至没有数字,则此方法有效。
declare @Something table
(
ControlName varchar(50)
)
insert @Something values
('VALVE 1')
, ('MAIN VALVE')
, ('VALVE 10')
, ('BOILER 2')
, ('VALVE 17')
, ('BOILER 1')
, ('VALVE 19')
, ('VALVE 2')
select *
from @Something
order by left(ControlName, LEN(ControlName) - patindex('%[^0-9]%', REVERSE(ControlName)) + 1) --this gets the "prefix" or characters before the last set of numbers
, convert(int, right(ControlName, patindex('%[^0-9]%', REVERSE(ControlName)) - 1)) --this gets the last set of numbers
推荐阅读
- ios - 获取 NSDictionary 中存在的所有键并放入 Array
- bash - 管道时git reflog丢失数据
- php - 如何在 php 中生成 postgresql 日期输出?
- javascript - Promise.all() 等待对象属性的返回
- javascript - 当我单击按钮时,输入根本没有显示。如果我删除表单一个 html 然后它可以工作,但我希望它以表单工作
- python-3.x - 无法用硒提取属性值
- list - 我将如何在 Racket 博士中编写一个函数,该函数使用 2 个可能的符号列表并用其他符号替换它们?
- c - 你可以用 pty 做什么?
- javascript - 如何使用函数将值从子组件传递到父组件?
- c++ - opencv QRCodeDetector 抛出异常?