这是我的字符串:11.0000.0101.000.000.0101.000.000
我需要将第一个“0101”替换为“101”。我不能使用replace,因为它也取代了0101的第二个实例。
我试过
stuff(string, 9, 3, '101')
但是由于替换字符串比现有字符串短,我最终得到
11.0000.1011.000.000.0101.000.000
除了REPLACE或STUFF,我还能使用什么?谢谢!
答案 0 :(得分:1)
declare @t table(s varchar(100))
insert into @t values
( '11.0000.0101.000.000.0101.000.000'), ('abc');
select case charindex('0101', s)
when 0 then s
else stuff(s, charindex('0101', s), 4, '101')
end as new_s
from @t;
答案 1 :(得分:1)
你的表情几乎是正确的。
告诉它替换原始字符串的4个字符而不是3:
stuff(string, 9, 4, '101')
但是只有当你的字符串总是在相同的位置时,这才有效。
答案 2 :(得分:0)
你可以这样做:
replace (stuff(string,9,3,'#101'),'#','')
答案 3 :(得分:0)
如果您需要将所有0101替换为101,请使用以下代码
DECLARE @TempData TABLE(Data VARCHAR(1000));
INSERT INTO @TempData VALUES
('11.0000.0101.000.000.0101.000.000');
;WITH Cte
AS (
SELECT CASE
WHEN DATA = '0101'
THEN '101'
ELSE CAST(DATA AS VARCHAR(10))
END AS DATA
FROM (
SELECT Split.a.value('.', 'VARCHAR(1000)') AS Data
FROM (
SELECT CAST('<S>' + REPLACE(Data, '.', '</S><S>') + '</S>' AS XML) AS Data
FROM @TempData
) AS A
CROSS APPLY Data.nodes('/S') AS Split(a)
) Dt
)
SELECT STUFF((
SELECT '.' + DATA
FROM cte
FOR XML PATH('')
), 1, 1, '') AS ExpectedResult
输出
ExpectedResult
11.0000.101.000.000.101.000.000
答案 4 :(得分:0)
如果您不了解第一次观察,还有另一种选择
https://api.library.com/:entity/
返回
Declare @S varchar(50) = '11.0000.0101.000.000.0101.000.000'
Declare @Find varchar(25) = '0101'
Declare @Repl varchar(25) = '101'
Select isnull(stuff(@S, charindex(@Find,@S), len(@Find), @Repl),@S)