使用TSQL对字符串中的整数进行排序

时间:2016-01-26 23:49:27

标签: mysql tsql sorting

我正在尝试使用TSQL将诸如'3,9,6'之类的字符串排序为'3,6,9'。我的方法是从字符串中提取字符,将它们作为整数转换,并使用主键将它们放入#temptable进行排序。为此,我创建了这个程序:

create proc sortstring(@string varchar(50))
as
    declare @limit int = len(@string)
    declare @counter int = 1
    declare @temps char
    create table #temptable (tempstring varchar(30) primary key)
        while @counter<=@limit
            begin
                set @temps = SUBSTRING(@string,@counter,1)
                    if(@temps!=',')
                        insert into #temptable values (CAST(@temps as int))
                set @counter= @counter+1
            end

在这个过程之后,我想用#temptable从while循环中提取整数来创建排序字符串格式'3,6'9'。但我认为我的整个方法效率不高。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

下面的方法应该比while循环好一点

declare @string varchar(255) =  '3,9,6,0,5,12,88,15,23,45,77,88,125,1'
declare @TableList table (tmpStr int)

DECLARE @XML XML

SET @XML = '<root><csv>' + replace(@string, ',', '</csv><csv>') + '</csv></root>'

INSERT @TableList
SELECT replace(Word.value('.', 'integer'), CHAR(10), '') 
FROM @XML.nodes('/root/csv') AS WordList(Word)

select * from @TableList order by 1
go

答案 1 :(得分:0)

union

它不是传统方法,但运行速度很快。