2012-01-25 66 views
0

我的问题是我写了一个函数如何通过执行以下功能

ALTER FUNCTION [dbo].StringSplitting_23012012 (@string NVARCHAR(MAX), 
@Delimiter NVARCHAR(1)) 
RETURNS 
@Temp TABLE (string NVARCHAR(MAX)) 
AS 
BEGIN 
    DECLARE @p int 
    SET @p = 0 
    --SET @string = (@string + @Delimiter) 
    WHILE charindex(@Delimiter,@string) < 0 --,@p) <> 0 
    BEGIN 
     INSERT into @Temp 
     SELECT substring(@string,@p,charindex(@Delimiter,@string)) --+ @p) 
     --select substring(@string,5,15) SET @p = charindex(@Delimiter,@string) --1 
    END 
    RETURN 
END 

,并传递字符串到函数

SELECT * FROM [dbo].StringSplitting('SPLA-WINSVRSTD #P19-1999 QTY1: 
SPLA-WINSVRSTD #P12-2999 QTY2 : SPLA-WINSVRSTD #P19-1399 QTY3 : 
SPLA-WINSVRSTD #P19-1399 QTY4 : SPLA-WINSVRSTD #P59-5999 QTY5 : 
SPLA-WINSVRSTD #P69-6999 QTY6 : SPLA-WINSVRSTD #P79-7999 QTY7 : 
SPLA-WINSVRSTD #P69-6999 QTY8',':') 

得到需要的结果和我得到的输出作为

SPLA-WINSVRSTD #P19-1999 QTY1 
SPLA-WINSVRSTD #P12-2999 QTY2 
SPLA-WINSVRSTD #P19-1399 QTY3 
SPLA-WINSVRSTD #P19-1399 QTY4 
SPLA-WINSVRSTD #P59-5999 QTY5 
SPLA-WINSVRSTD #P69-6999 QTY6 
SPLA-WINSVRSTD #P79-7999 QTY7 
SPLA-WINSVRSTD #P69-6999 QTY8 

到此为止,但我需要输出像

SPLA P12-2999 QTY2 
SPLA P19-1399 QTY3 
SPLA P19-1399 QTY4 
SPLA P59-5999 QTY5 
SPLA P69-6999 QTY6 
SPLA P79-7999 QTY7 
SPLA P69-6999 QTY8 

ü将请帮我如何写函数或过程,以获得所需的输出

回答

0

我建议使用REPLACE功能 - 就像这样:

[格式化为清晰起见]

SELECT * FROM [dbo].StringSplitting(
REPLACE('SPLA-WINSVRSTD #P19-1999 QTY1: 
     SPLA-WINSVRSTD #P12-2999 QTY2 : SPLA-WINSVRSTD #P19-1399 QTY3 : 
     SPLA-WINSVRSTD #P19-1399 QTY4 : SPLA-WINSVRSTD #P59-5999 QTY5 : 
     SPLA-WINSVRSTD #P69-6999 QTY6 : SPLA-WINSVRSTD #P79-7999 QTY7 : 
     SPLA-WINSVRSTD #P69-6999 QTY8', '-WINSVRSTD #','') 
,':') 

[复制粘贴]

SELECT * FROM [dbo].StringSplitting(REPLACE(
'SPLA-WINSVRSTD #P19-1999 QTY1 : SPLA-WINSVRSTD #P12-2999 QTY2 : SPLA-WINSVRSTD #P19-1399 QTY3 : SPLA-WINSVRSTD #P19-1399 QTY4 : SPLA-WINSVRSTD #P59-5999 QTY5 : SPLA-WINSVRSTD #P69-6999 QTY6 : SPLA-WINSVRSTD #P79-7999 QTY7 : SPLA-WINSVRSTD #P69-6999 QTY8' 
, '-WINSVRSTD #','') ,':')