2014-08-28 65 views
-4

字符串我有兩個字符串變量:分割在存儲過程中

@str1='abc/xyz' 
@str2='/' 

我希望使用這兩個變量來提取的@str1'xyz'部分。

+1

只是谷歌,你會發現百SQL中字符串拆分函數的不同實現... – 2014-08-28 08:15:24

回答

0

值可以創建一個存儲過程爲:

CREATE PROC splitstring @ STR1 VARCHAR (100),

@ str2 varchar(1),

@laststr VARCHAR(100)OUT

AS

BEGIN

DECLARE @len INT

DECLARE @i INT = 1

SELECT @len=LEN(@str) 

WHILE(@i <[email protected]) 

    BEGIN 

     if (SUBSTRING(@str1,@i,1)[email protected]) 

      BEGIN 

       SELECT @laststr = SUBSTRING(@str1,@i+1,@len) 
       break 
      END 
     SELECT @i = @i + 1 
    END 

END

和使用以下查詢

DECLARE @laststr VARCHAR(100) EXEC lastpart @ STR1 = 'ABC/XYZ',@ STR2 = '/',@ laststr = @ laststr出 選擇@laststr

0

創建下面的表值函數:

你就可以得到像

select * from dbo.fn_split(@str1,@str2) 

CREATE FUNCTION [dbo].[fn_Split](@sText varchar(8000), @sDelim varchar(20) = ' ') 
RETURNS @retArray TABLE (idx smallint Primary Key, value varchar(8000)) 
AS 
BEGIN 
DECLARE @idx smallint, 
    @value varchar(8000), 
    @bcontinue bit, 
    @iStrike smallint, 
    @iDelimlength tinyint 

IF @sDelim = 'Space' 
    BEGIN 
    SET @sDelim = ' ' 
    END 

SET @idx = 0 
SET @sText = LTrim(RTrim(@sText)) 
SET @iDelimlength = DATALENGTH(@sDelim) 
SET @bcontinue = 1 

IF NOT ((@iDelimlength = 0) or (@sDelim = 'Empty')) 
    BEGIN 
    WHILE @bcontinue = 1 
     BEGIN 

--If you can find the delimiter in the text, retrieve the first element and 
--insert it with its index into the return table. 

     IF CHARINDEX(@sDelim, @sText)>0 
      BEGIN 
      SET @value = SUBSTRING(@sText,1, CHARINDEX(@sDelim,@sText)-1) 
       BEGIN 
       INSERT @retArray (idx, value) 
       VALUES (@idx, @value) 
       END 

--Trim the element and its delimiter from the front of the string. 
      --Increment the index and loop. 
SET @iStrike = DATALENGTH(@value) + @iDelimlength 
      SET @idx = @idx + 1 
      SET @sText = LTrim(Right(@sText,DATALENGTH(@sText) - @iStrike)) 

      END 
     ELSE 
      BEGIN 
--If you can’t find the delimiter in the text, @sText is the last value in 
[email protected] 
SET @value = @sText 
       BEGIN 
       INSERT @retArray (idx, value) 
       VALUES (@idx, @value) 
       END 
      --Exit the WHILE loop. 
SET @bcontinue = 0 
      END 
     END 
    END 
ELSE 
    BEGIN 
    WHILE @bcontinue=1 
     BEGIN 
     --If the delimiter is an empty string, check for remaining text 
     --instead of a delimiter. Insert the first character into the 
     --retArray table. Trim the character from the front of the string. 
--Increment the index and loop. 
     IF DATALENGTH(@sText)>1 
      BEGIN 
      SET @value = SUBSTRING(@sText,1,1) 
       BEGIN 
       INSERT @retArray (idx, value) 
       VALUES (@idx, @value) 
       END 
      SET @idx = @idx+1 
      SET @sText = SUBSTRING(@sText,2,DATALENGTH(@sText)-1) 

      END 
     ELSE 
      BEGIN 
      --One character remains. 
      --Insert the character, and exit the WHILE loop. 
      INSERT @retArray (idx, value) 
      VALUES (@idx, @sText) 
      SET @bcontinue = 0 
      END 
    END 

END 

RETURN 
END