我有一列需要按矩阵排序的列,但是我的问题是该列包含数字和字符的混合,因为它是一个范围字段,并且每个分组父级的范围都不同。 分组的示例如下
Create Table #temp
(
range Varchar(30)
)
Insert into #temp (range)
select '[0-501]' Union
select '[13001-17001]' Union
select '[17001-999999]' Union
select '[8501-13001]' Union
select '[501-8501]'
SELECT *
FROM #temp order by range
drop table #temp
[17001-999999]
[0-501]
[13001-17001]
[8501-13001]
[501-8501]
订购后的首选结果如下
[0-501]
[501-8501]
[8501-13001]
[13001-17001]
[17001-999999]
答案 0 :(得分:1)
最好设计表,使其具有某种“排序顺序”列。 但是您可以使用此:
SELECT *,TRY_CAST(SUBSTRING(range,2,CHARINDEX('-',range)-2) AS INT) as SortOrder
FROM #temp
然后使用此列对矩阵进行排序。
答案 1 :(得分:1)
在下面的查询中尝试此操作,它将提供所需的输出
SELECT *
FROM #temp
order by cast(replace(replace(replace(range,'-',''),'[',''),']','') as bigint)