我在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。
如果此条目已存在,则忽略替换。
提前致谢。
答案 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答案。