我正在尝试使用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'。但我认为我的整个方法效率不高。
有什么建议吗?
答案 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
它不是传统方法,但运行速度很快。