首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL查找和替换以及忽略重复替换

SQL查找和替换以及忽略重复替换
EN

Stack Overflow用户
提问于 2015-02-25 17:36:55
回答 2查看 188关注 0票数 0

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

代码语言:javascript
复制
  SET ID = REPLACE(ID, *'X4', *'X14');

例如,考虑以下ID数据:

代码语言:javascript
复制
BOA04
SBA04
SBH4
BOH4
BOH14
BOZ4

因此,在上面的数据中,我只想将SBH4更改为SBH14,将BOH4更改为BOH14 (但这里将复制它),并将BOZ4更改为BOZ14。

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

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

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2015-02-25 17:56:58

sql-server解决方案

这将选择值

代码语言:javascript
复制
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)

这将更新表:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2015-02-25 18:06:08

这应该可以做到:

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28715551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档