SQL查找&替换并忽略重复的替换

时间:2015-02-25 09:36:55

标签: sql sql-server replace

我在SQL中有一个带有ID列表的数据库,我想替换最后一位数为4或5的ID(不包括那些以“04”,“05”,“14”或“ 15“)并将其替换为14或15.问题是以下命令出现重复错误:

  SET ID = REPLACE(ID, *'X4', *'X14');

例如,请考虑以下ID数据:

BOA04
SBA04
SBH4
BOH4
BOH14
BOZ4

因此,在上述数据中,我只想将SBH4改为SBH14,将BOH4改为BOH14(但这是重复的地方)和BOZ4改为BOZ14。

总结:对于长度为4个字符的所有ID,如果最后一个数字为4,则将最后一个数字替换为14,否则如果最后一个数字为5,则替换为15。

如果此条目已存在,则忽略替换。

提前致谢。

2 个答案:

答案 0 :(得分:1)

sql-server的解决方案:

这将选择值

SELECT CASE WHEN x like '__[^01][45]' THEN STUFF(x, 4, 0, '1') ELSE x END
FROM 
(values('BOA04'),('SBA04'),('SBH4'),('BOH4'),('BOH14'),('BOZ4')) x(x)

这将更新表格:

DECLARE @t table(x varchar(5))
INSERT @t
values('BOA04'),('SBA04'),('SBH4'),('BOH4'),('BOH14'),('BOZ4')

UPDATE @t SET x = STUFF(x, 4, 0, '1')
FROM @t
WHERE x like '__[^01][45]'

答案 1 :(得分:1)

这应该这样做:

update your_table
set id = stuff(id, 4, 0, '1')
from your_table where right(id, 1) in (4,5)
and len(id) = 4
and stuff(id, 4, 0, '1') not in (select id from your_table)

最后一部分:and stuff(id, 4, 0, '1') not in (select id from your_table)确保您不会有任何重复。

{-1}}可以替换为right(id, 1) in (4,5) and len(id) = 4,如t-clausen.dks答案。