用于删除公共字符串

时间:2017-05-10 09:16:19

标签: sql sql-server

@strA和@strB是两个变量

@strA = "055367911126753316"
@strB = "00055367"

如何找到共同部分" 055367 "并使用SQL服务器查询从字符串A中删除它而不循环? 结果应该是" 911126753316"

  

请注意,字符串A始终以字符串B的结束部分开始

5 个答案:

答案 0 :(得分:1)

您可以在sql server中使用replace,如下所示:

declare @strA varchar(50) = '055367911126753316'
declare @strB varchar(50) = '00055367'

select replace(@strA,right(@strB,len(@strB)-2),'')

如果它在表格的不同列中,您可以使用如下:

create table #yourcolumns ( cola varchar(50), colb varchar(50))

insert into #yourcolumns (cola, colb) values
('055367911126753316', '00055367')

select replace(cola,right(colb,len(colb)-2),'') from #yourcolumns

我认为我们需要在您的情况下寻找子字符串,因为您正在寻找

select SUBSTRING(cola,CHARINDEX(LEFT(REVERSE(colb),1),cola)+1,len(cola)) from #yourcolumns

答案 1 :(得分:0)

循环播放是,但它有效....

create function MyFn (@A nvarchar(max), @B nvarchar(max))
returns  nvarchar(max)
as
begin

    declare  @I int, @L int, @SUB nvarchar(max)

    select @I = 1, @L =  len(@B)
    while @I<@L begin
        set @SUB = substring(@B,@I,@L-@I+1)
        if charindex(@SUB,@A,1) > 0 begin
            set @A = replace(@A, @SUB, '')
            break
        end
    set @I = @I + 1
    end

    return @A
end

答案 2 :(得分:0)

DECLARE @strA varchar(50) = '055367911126753316'
DECLARE @strB varchar(50) = '00055367'

SET  @strA=(SELECT REVERSE(SUBSTRING(@strA, PATINDEX('%[^0 ]%', @strA + ' '), LEN(@strA))))
SET  @strB=(SELECT REVERSE(SUBSTRING(@strB, PATINDEX('%[^0 ]%', @strB + ' '), LEN(@strB))))

SELECT @strA String ,@strB StringtoSearch,REVERSE(SUBSTRING(@strA,0,CHARINDEX(RIGHT(@strA,LEN(@strB)),@strA)))ExpectedOutput

输出

ExpectedOutput
---------------
911126753316

答案 3 :(得分:0)

如果每个字符串A以000开头且每个字符串b只包含一个0,则应检索正确的结果

WITH CTE AS (SELECT [StringA], [StringB],REPLACE([StringB], '000', '0') [tbd] 
FROM YourTable)

SELECT REPLACE(YourTable.[StringA], CTE.[tbd], ''), YourTable.[StringA]
FROM YourTable
JOIN CTE ON YourTable.[StringA]= CTE.[StringA]

答案 4 :(得分:0)

试试这个,动态运作。

declare @StrA Nvarchar(250)='055367911126753316',@StrB Nvarchar(250)='0055367'

select right(@StrA,len(@strA)-PATINDEX('%[^'+@StrB+']%',@strA)+1)