我在SQL中有一个带有is列表的数据库,我想替换最后一个数字为4或5的is(不包括以"04“、"05”、" 14“或”15“结尾的is),并将其替换为14或15。问题是以下命令出现重复错误:
SET ID = REPLACE(ID, *'X4', *'X14');例如,考虑以下ID数据:
BOA04
SBA04
SBH4
BOH4
BOH14
BOZ4因此,在上面的数据中,我只想将SBH4更改为SBH14,将BOH4更改为BOH14 (但这里将复制它),并将BOZ4更改为BOZ14。
总结:对于长度为4个字符的所有in,如果最后一个数字是4,则将最后一个数字替换为14,否则,如果最后一个数字是5,则替换为15。
如果此条目已经存在,则忽略替换。
提前谢谢。
发布于 2015-02-25 17:56:58
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]'发布于 2015-02-25 18:06:08
这应该可以做到:
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)确保你不会有任何重复的东西。
如t-clausen.dks答案中那样,可以用id like '__[^01][45]'替换right(id, 1) in (4,5) and len(id) = 4。
https://stackoverflow.com/questions/28715551
复制相似问题