我是SQL新手..
我想对一列进行排序,该列的值将是
示例:D2V2PRT1,D1V2PRT2,D2V1PRT1,D1V1PRT3......
我希望将输出排序为
D1V1PRT3,
D1V2PRT2,
D2V1PRT1,
D2V2PRT1,......
因此排序应该发生,首先它将为D值排序,然后为V值排序,然后对于PRT值,所有值都在字符串中。
我已经编写了一些逻辑并能够将值与D V和PRT分开,所以现在我的问题是如何按顺序指定
先谢谢
答案 0 :(得分:2)
您可以使用charindex
提取数字:
declare @t table (id varchar(100));
insert @t values ('D1V1PTR1'), ('D100V1PTR1'), ('D1V8PTR5'), ('D1V40PTR10');
; with extracted as
(
select substring(id, 2, charindex('V', id)-2) as D
, substring(id, charindex('V', id)+1,
charindex('PTR', id)-charindex('V', id)-1) as V
, substring(id, charindex('PTR', id)+3, 100) as PTR
from @t
)
select *
from extracted
order by
cast(d as bigint)
, cast(v as bigint)
, cast(ptr as bigint)
如您所见,SQL不是解析字符串的最佳语言。 :)
答案 1 :(得分:1)
使用ORDER BY SUBSTRING(...)
对部分字符串进行排序,如下所示:
order by substring(val, 1, 2), substring(val, 3, 2), substring(val, 5, 4)
这假设D和V字段是两个字符长且PRT四个字符和排序字符串(D1
和V1
等等),而不是数字值,可能不是正确,但由于你已经有分裂字符串的逻辑,它应该很容易调整。