使用存储过程的字符串操作

时间:2014-01-17 11:38:07

标签: sql sql-server string stored-procedures

我有一个冒号分隔的字符串,例如

@var='apple;banana;snake;mango;dog';
@tobedeleted='banana';

并假设我是否需要使用存储过程从@var删除banana并且结果字符串应该看起来像

@var='apple;snake;mago;dog'

如何使用存储过程实现这一目标?

6 个答案:

答案 0 :(得分:1)

确保所有标记在左侧和右侧分隔,替换然后删除添加的分隔符

select substring(replace(';' + @var + ';', ';' + @remove + ';', ';'), 2, len(@var) - len(@remove) - 1)

答案 1 :(得分:1)

不确定我会选择一个过程,但这完全取决于你想要实现的目标背景。

如果您在proc上进行INSIST;

CREATE PROC dbo.NoMoreBananas
    @FullString     VARCHAR(1000),
    @StringToDelete VARCHAR(50),
    @OutString      VARCHAR(1000) OUTPUT
AS 
BEGIN
    SET @OutString = REPLACE(REPLACE(@FullString, @StringToDelete, ''), ';;', ';')
    IF(LEFT(@OutString, 1) = ';')
    BEGIN
        SET @OutString = RIGHT(@OutString, LEN(@OutString)-1)
    END
    IF(RIGHT(@OutString, 1) = ';')
    BEGIN
        SET @OutString = LEFT(@OutString, LEN(@OutString)-1)
    END
END
GO


DECLARE @RC int
DECLARE @FullString varchar(1000)       = 'apple;banana;snake;mango;dog'
DECLARE @StringToDelete varchar(50)     = 'banana'
DECLARE @OutString varchar(1000)

-- TODO: Set parameter values here.

EXECUTE @RC = [dbo].[NoMoreBananas] 
   @FullString
  ,@StringToDelete
  ,@OutString OUTPUT

SELECT @OutString
GO

答案 2 :(得分:0)

SELECT REPLACE(REPLACE(';;'+@var+';;',';'+@tobedeleted,''),';;','') 

答案 3 :(得分:0)

SET @var = REPLACE (@var + ';', @tobedeleted + ';', '')

答案 4 :(得分:0)

使用2 REPLACE功能,一个删除单词,两个删除重复的“;”,如果出现:

set @var = REPLACE( REPLACE(@var, @tobedeleted, ''), ';;', ';')

答案 5 :(得分:0)

您应该规范化数据库。如果这些值('apple;banana;snake;mango;dog')可以存储在表中,则会更简单。在这种情况下,简单的DELETE语句将解决问题:

DELETE dbo.Fruits
WHERE Name = N'banana'