拼接字符串使用

来源:互联网 发布:ti6奖金 知乎 编辑:程序博客网 时间:2024/05/22 14:42

CREATE function Get_StrArrayStrOfIndex

(

 @str varchar(1024),  --要分割的字符串

 @split varchar(10),  --分隔符号

 @index int --取第几个元素

)

returns varchar(1024)

as

begin

 declare @location int

 declare @start int

 declare @next int

 declare @seed int

 set @str=ltrim(rtrim(@str))

 set @start=1

 set @next=1

 set @seed=len(@split)

 set @location=charindex(@split,@str)

 while @location<>0 and @index>@next

   begin

    set @start=@location+@seed

    set @location=charindex(@split,@str,@start)

    set @next=@next+1

   end

 if @location =0 select @location =len(@str)+1 

 

--这儿存在两种情况:1、字符串不存在分隔符号 2、字符串中存在分隔符号,跳出while循环后,@location为0,那默认为字符串后边有一个分隔符号。

 return substring(@str,@start,@location-@start)

end

 

 

 

 

 

---取得传入字符串的长度

 

 

ALTER FUNCTION Get_StrArrayLength

    (

      @str VARCHAR(1024) , --要分割的字符串

      @split VARCHAR(10) --分隔符号

    )

RETURNS INT

AS 

    BEGIN

        DECLARE @location INT

        DECLARE @start INT

        DECLARE @length INT

        SET @str = LTRIM(RTRIM(@str))

        SET @location = CHARINDEX(@split, @str)

        SET @length = 1

        WHILE @location <> 0 

            BEGIN

                SET @start = @location + 1

                SET @location = CHARINDEX(@split, @str, @start)

                SET @length = @length + 1

            END

        RETURN @length

    END

 

 

 

 

 

            DECLARE @mode NVARCHAR(100)

            SELECT  @mode = MediaMode

            FROM    dbo.NMS_Form_Media

            WHERE   TaskID = @taskID

 

            SELECT  @lenth = dbo.Get_StrArrayLength(@mode, ',')

            SET @next = 1

            WHILE @next <= @lenth - 1 

                BEGIN

                    SET @num = dbo.Get_StrArrayStrOfIndex(@mode, ',', @next)

                    IF NOT EXISTS ( SELECT  *

                                    FROM    CAMSDB_NMS.dbo.PAYEE_TVMEDIA

                                    WHERE   PayeeAccount_ID = @num

                                            AND TVMEDIA_ID = @media_ID ) 

                        BEGIN

                            INSERT  INTO CAMSDB_NMS.dbo.PAYEE_TVMEDIA

                                    ( TVMEDIA_ID ,

                                      PayeeAccount_ID ,

                                      IsStrong ,

                                      DeadLine ,

                                      IsSignAgreement ,

                                      IsClientSpecify ,

                                      BeginDate ,

                                      EndDate ,

                                      CushingPeriod

                                )

                            VALUES  ( @media_ID , -- TVMEDIA_ID - int

                                      @num , -- PayeeAccount_ID - int

                                      NULL , -- IsStrong - bit

                                      0 , -- DeadLine - smallint

                                      NULL , -- IsSignAgreement - bit

                                      NULL , -- IsClientSpecify - bit

                                      NULL , -- BeginDate - smalldatetime

                                      NULL , -- EndDate - smalldatetime

                                      0  -- CushingPeriod - smallint

                                )

                        END

                    SET @next = @next + 1

                END