我有一个冒号分隔的字符串,例如
@var='apple;banana;snake;mango;dog';
@tobedeleted='banana';
并假设我是否需要使用存储过程从@var删除banana并且结果字符串应该看起来像
@var='apple;snake;mago;dog'
如何使用存储过程实现这一目标?
答案 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'