I have a colon separated string such as
@var='apple;banana;snake;mango;dog';
@tobedeleted='banana';
and suppose if I need to delete banana from @var using stored procs and the resulting string should look like
@var='apple;snake;mago;dog'
How is this achievable using a stored procedure?
确保在左侧和右侧对所有标记进行定界,替换然后删除添加的定界符
select substring(replace(';' + @var + ';', ';' + @remove + ';', ';'), 2, len(@var) - len(@remove) - 1)
Not sure I would go for a proc, but it depends entirely on the context of what you're attempting to achieve.
If you INSIST on a proc;
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
SELECT REPLACE(REPLACE(';;'+@var+';;',';'+@tobedeleted,''),';;','')
SET @var = REPLACE (@var + ';', @tobedeleted + ';', '')
使用2个REPLACE函数,一个删除单词,第二个删除重复的“;”(如果出现):
set @var = REPLACE( REPLACE(@var, @tobedeleted, ''), ';;', ';')
You should normalize database. Would be much simpler if those values ( 'apple;banana;snake;mango;dog'
) could be stored within table. In this case, a simple DELETE
statement will solve the problem:
DELETE dbo.Fruits
WHERE Name = N'banana'
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.