@strA和@strB是两个变量
@strA = "055367911126753316"
@strB = "00055367"
如何找到共同部分" 055367 "并使用SQL服务器查询从字符串A中删除它而不循环? 结果应该是" 911126753316"
请注意,字符串A始终以字符串B的结束部分开始
答案 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)