我收到了数千个包含数据的字符串,并且标识有'@xx'的id。如果字符串有'|'它表示有更多带有ID的数据。
如何查找并替换包含特定ID的所有ID?如果我想将@ 1更改为@ 24,我不希望将@ 11更改为@ 241
具有预期输出的一些示例 :
21600-39600@1 -> 21600-39600@24
21600-39600@2 -> 21600-39600@2
21600-39600@7|39600-52200@11|68000-72200@1 -> 21600-39600@7|39600-52200@11|68000-72200@24
替换(列,'@ 1','@ 24')不起作用,因为@ 11将更改为@ 241。所以我需要知道它是否是字符串的结尾或者是否以“|”
结尾答案 0 :(得分:2)
又快又脏,但你可以这样做:
-- Update the end bits
UPDATE table
SET field = LEFT('field', LEN('field') -2) + '@24'
WHERE field LIKE '%@1';
-- Update the in between bits
UPDATE table
SET field = REPLACE(field, '@1|', '@24|')
WHERE field LIKE '%@1|%'; -- This where statement is optional due to the nature of the REPLACE.
否则你将不得不关注REGEX的神奇世界。如果这是你想要不止一次运行的东西,我肯定会考虑到这一点。如果这只是一次性修复,那么。这是星期四,我称之为有效的借口。
答案 1 :(得分:1)
试试这个
declare @t table(col varchar(100))
insert into @t
select '21600-39600@1' union all
select '21600-39600@2' union all
select '21600-39600@7|39600-52200@11|68000-72200@1'
select col,case when new_col like '%|' then
substring(new_col,1,len(new_col)-1)
else
new_col end as new_col
from
(
select col,
case when col+'|' like '%@1|%' then
Replace(col+'|', '@1|', '@24|') else col end as new_col
from @t
) as t
结果
col new_col
--------------------------------------------- ------------
21600-39600@1 21600-39600@24
21600-39600@2 21600-39600@2
21600-39600@7|39600-52200@11|68000-72200@1 21600-39600@7|39600-52200@11|68000-72200@24