Sql 使用存储过程的字符串操作
我有一个冒号分隔的字符串,例如Sql 使用存储过程的字符串操作,sql,sql-server,string,stored-procedures,Sql,Sql Server,String,Stored Procedures,我有一个冒号分隔的字符串,例如 @var='apple;banana;snake;mango;dog'; @tobedeleted='banana'; 假设我需要使用存储过程从@var中删除香蕉,结果字符串应该如下所示 @var='apple;snake;mago;dog' 使用存储过程如何实现这一点?确保所有标记都在左侧和右侧进行分隔,然后替换并删除添加的分隔符 select substring(replace(';' + @var + ';', ';' + @remove + ';',
@var='apple;banana;snake;mango;dog';
@tobedeleted='banana';
假设我需要使用存储过程从@var中删除香蕉,结果字符串应该如下所示
@var='apple;snake;mago;dog'
使用存储过程如何实现这一点?确保所有标记都在左侧和右侧进行分隔,然后替换并删除添加的分隔符
select substring(replace(';' + @var + ';', ';' + @remove + ';', ';'), 2, len(@var) - len(@remove) - 1)
我不确定我是否会选择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
使用2个替换功能,一个删除单词,两个删除重复的“;”,如果出现:
set @var = REPLACE( REPLACE(@var, @tobedeleted, ''), ';;', ';')
您应该规范化数据库。如果这些值(
'apple;banana;snake;mango;dog'
)可以存储在表中,则会简单得多。在这种情况下,一个简单的DELETE
语句将解决问题:
DELETE dbo.Fruits
WHERE Name = N'banana'
如果必须删除“dog”怎么办?如果两个字符串相同,此解决方案将引发错误。意识到我没有正确使用输出
set @var = REPLACE( REPLACE(@var, @tobedeleted, ''), ';;', ';')
DELETE dbo.Fruits
WHERE Name = N'banana'