首页 > 解决方案 > SQL按带有条件的子字符串排序

问题描述

我的数据如下所示:

[Model Number]
[Model Number]*1
[Model Number]*4
[Model Number]*10
[Model Number]*13

当我选择它们时,我会按“*”后面的数字对它们进行排序,我几乎可以正常工作,但我不知道如何处理没有“*”的情况。这是我查询的最后一部分:

ORDER BY 
CAST(SUBSTRING(COL_NAME, CHARINDEX('*', COL_NAME) + 1, LEN(COL_NAME)) AS INT) DESC

谢谢您的帮助

标签: sqlsql-serversubstringcharindex

解决方案


你快到了,试试这个

declare @t table (col_name varchar(128));
insert into @t (col_name)
values
( '[Model Number]')
, ('[Model Number]*1')
, ('[Model Number]*4')
, ('[Model Number]*10')
, ('[Model Number]*13');

select *
from @t
order by case charindex('*', col_name) when 0 then 0 else cast(substring(col_name, charindex('*', col_name)+1, 10) as int) end desc

在此处输入图像描述


推荐阅读