Sql 拆分字符串,与另一个字符串连接并对其排序
我在表1中有两列Col1和Col2。如果Col1的两行的值为“C,B”和“A,B”,Col2的两行的值为“ASC”和“DES”,我需要按“ADES,B”和“CASC,B”的顺序将输出分为两行(即,应根据第一个值进行排序) Col1值应基于逗号分隔,并应与Col2值组合,输出应基于第一个值按顺序排序 我有一个字符串拆分函数,如下所示:Sql 拆分字符串,与另一个字符串连接并对其排序,sql,sql-server,stored-procedures,split,Sql,Sql Server,Stored Procedures,Split,我在表1中有两列Col1和Col2。如果Col1的两行的值为“C,B”和“A,B”,Col2的两行的值为“ASC”和“DES”,我需要按“ADES,B”和“CASC,B”的顺序将输出分为两行(即,应根据第一个值进行排序) Col1值应基于逗号分隔,并应与Col2值组合,输出应基于第一个值按顺序排序 我有一个字符串拆分函数,如下所示: ALTER FUNCTION [dbo].[SplitString](@String nvarchar(4000), @Delimiter char(1))
ALTER FUNCTION [dbo].[SplitString](@String nvarchar(4000), @Delimiter char(1))
returns @temptable TABLE (items nvarchar(4000))
as
begin
declare @idx int
declare @slice nvarchar(4000)
select @idx = 1
if len(@String)<1 or @String is null return
while @idx!= 0
begin
set @idx = charindex(@Delimiter,@String)
if @idx!=0
set @slice = left(@String,@idx - 1)
else
set @slice = @String
if(len(@slice)>0)
insert into @temptable(Items) values(@slice)
set @String = right(@String,len(@String) - @idx)
if len(@String) = 0 break
end
return
end
所需输出:
Col1 Col2
C,B ASC
A,B DES
Output
ADES,B
CASC,B
任何人都可以帮忙得到想要的输出
SELECT *
, LEFT(Co1,CHARINDEX(',',Co1)-1)
+ Col2
+ SUBSTRING(Co1,CHARINDEX(',',Co1),256) AS Result
FROM Table1
ORDER BY Result
将256替换为列的长度或任何更大的值
编辑:
Col1 Col2
C,B ASC
A,B DES
Output
ADES,B
CASC,B
更好的是,使用函数:
SELECT *, STUFF(Co1,CHARINDEX(',',Co1),0,Col2) AS Result
FROM Table1
ORDER BY Result