Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用存储过程的字符串操作_Sql_Sql Server_String_Stored Procedures - Fatal编程技术网

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'