繁体   English   中英

使用存储过程进行字符串操作

[英]String manipulation using stored procedure

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

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

并假设是否需要使用存储的procs从@var中删除香蕉,结果字符串应类似于

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

使用存储过程如何做到这一点?

确保在左侧和右侧对所有标记进行定界,替换然后删除添加的定界符

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

不确定我是否会申请proc,但这完全取决于您要实现的目标。

如果您在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
SELECT REPLACE(REPLACE(';;'+@var+';;',';'+@tobedeleted,''),';;','') 
SET @var = REPLACE (@var + ';', @tobedeleted + ';', '')

使用2个REPLACE函数,一个删除单词,第二个删除重复的“;”(如果出现):

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

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

DELETE dbo.Fruits
WHERE Name = N'banana'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM