首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

一个SQL函数解决方案

2013-08-23 
一个SQL函数输入一个字符串,然后可以把这个字符串所包含的字符和字符所在位置表示出来如:输入ABCDEE则输出

一个SQL函数
输入一个字符串,然后可以把这个字符串所包含的字符和字符所在位置表示出来
如:输入ABCDEE
则输出
A1NULL
B2NULL
C3NULL
D4NULL
E56
或者调换行列也行
[解决办法]
--这个需要动态拼SQL,函数是不支持的。而且表值函数,也不支持返回不定个数列的表。
--建议用存储过程实现

ALTER PROC UP_test
@string VARCHAR(MAX)
AS
begin
    DECLARE @counter INT, @sql NVARCHAR(MAX), @MaxCount INT, @FieldList NVARCHAR(MAX)
    SET @counter = 1
 
    CREATE TABLE #temp(id INT, ch CHAR(1))
 
    WHILE(@counter <= LEN(@string))
    BEGIN
        INSERT #temp VALUES(@counter, substring(@string, @counter, 1))
        SET @counter = @counter + 1
    END
 
SELECT @MaxCount = MAX(cnt) FROM
(SELECT ch, cnt=COUNT(*) FROM #temp GROUP BY ch) T
SET @FieldList = STUFF(
(
SELECT ','+QUOTENAME(number+1) FROM master..spt_values
WHERE type='p' AND number < @MaxCount
FOR XML PATH('')
),1,1,''
)

SET @sql = N'
select * from 
(select rowid=row_number() over(partition by ch order by id),* from #temp) a
pivot
(max(id) for rowid in('+ @FieldList +')) b
'
EXEC(@sql)
end
GO

EXEC up_test 'ABCDEE'
/*
ch12
A1NULL
B2NULL
C3NULL
D4NULL
E56
*/


热点排行