写个函数为什么不好用啊,大家帮看看啊

qq_30854923 2016-12-08 06:07:54

ALTER FUNCTION [dbo].[F_aaaaaaaaa](@c VARCHAR(2000))
returns VARCHAR(1024)
AS
BEGIN
DECLARE @str VARCHAR(2000)
WHILE( Charindex('→', @c) <> 0 )
BEGIN
SET @str= @str + (SELECT WoProName FROM Tb_WorkingProcedure WHERE WoProID = Substring(@c, 1, Charindex('→', @c) - 1) OR FastInput = Substring(@c, 1, Charindex('→', @c) - 1))

SET @c = Stuff(@c, 1, Charindex('→', @c), '')
END

SET @str=@str+ (SELECT WoProName FROM Tb_WorkingProcedure WHERE WoProID = @c OR FastInput = @c)

RETURN @str
END
...全文
516 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
liushiying18 2016-12-11
  • 打赏
  • 举报
回复
也要用到,谢谢大家
tcmakebest 2016-12-09
  • 打赏
  • 举报
回复
都不说你要干嘛, 如何判断好不好用呢
中国风 2016-12-08
  • 打赏
  • 举报
回复
或改为 e.g.
ALTER FUNCTION [dbo].[F_aaaaaaaaa] ( @c VARCHAR(2000) )
RETURNS VARCHAR(1024)
AS
    BEGIN 
		SET @c='→'+@c+'→'
        SELECT @c=REPLACE(REPLACE(@c,'→'+WoProID+'→','→'+WoProName+'→'),'→'+FastInput+'→','→'+WoProName+'→')
		FROM Tb_WorkingProcedure 
		WHERE @c LIKE '%→'+WoProID+'→%' OR @c LIKE '%→'+FastInput+'→%'
        RETURN  (SUBSTRING(@c,2,LEN(@c)-2));
    END;
中国风 2016-12-08
  • 打赏
  • 举报
回复
e.g.
ALTER FUNCTION [dbo].[F_aaaaaaaaa] ( @c VARCHAR(2000) )
RETURNS VARCHAR(1024)
AS
    BEGIN 
        DECLARE @str VARCHAR(2000)= '' ,
            @i INT= 1 ,
            @j INT; 
        SELECT  @c = @c + '→' ,
                @j = CHARINDEX('→', @c, @i);        

        WHILE @j > 0
            BEGIN 
                SELECT  @str = @str + '→' + WoProName
                FROM    Tb_WorkingProcedure
                WHERE   WoProID = SUBSTRING(@c, @i, @j - @i)
                        OR FastInput = SUBSTRING(@c, @i, @j - @i);               
                SELECT  @i = @j + 1 ,
                        @j = CHARINDEX('→', @c, @i);
            END; 

        SET @str = STUFF(@str, 1, 1, '');

        RETURN  @str;
    END;

 GO
中国风 2016-12-08
  • 打赏
  • 举报
回复
e.g.
ALTER FUNCTION [dbo].[F_aaaaaaaaa] ( @c VARCHAR(2000) )
RETURNS VARCHAR(1024)
AS
    BEGIN 
        DECLARE @str VARCHAR(2000)='';  
        SET @str=STUFF((SELECT '→'+WoProName FROM Tb_WorkingProcedure WHERE '→'+@c+'→' LIKE '%→'+WoProID+'→%' OR '→'+@c+'→' LIKE '%→'+FastInput+'→%' FOR XML PATH('')),1,1,'')
        RETURN  @str;
    END;
qq_30854923 2016-12-08
  • 打赏
  • 举报
回复

WoProID WoProName
------- --------------------------------------------------
01      aa
02      bb
03      ab
04      cd
05      dad
06      dasdf
07      dda
08      sdf

SELECT [dbo].[F_aaaaaaaaa] ('01→02→03→04→06→07→08')
想返回下面结果
'aa→bb→ab→cd→dasdf→dda→sdf


卖水果的net 2016-12-08
  • 打赏
  • 举报
回复
说一下你的目的。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧