繁体   English   中英

更新和替换列中字符串的开始部分

[英]Update and Replace a start part of string from a column

**MyTable**
*myColumn*
/A/B/C/XYZ
/A/B/C/abc
...

/ A / B / C /无论是固定的还是动态的,都需要用/ 1/2/3 / whatever之类的东西替换,我喜欢将其更改为以下内容,将最后一部分保留在last /之后。

/1/2/3/XYZ
/1/2/3/abc
...

我运行以下查询

SELECT SUBSTRING(myColumn, 0,  len(myColumn) - CHARINDEX('/',REVERSE(myColumn)) +1 )
FROM MyTable

正确返回需要更换的零件

/A/B/C
/A/B/C
/A/B/C
...

通用更新是我从字符串的UPDATE和REPLACE部分了解的

Update MyTable SET myColumn = REPLACE(myColumn, '/A/B/C','/1/2/3')

所以我最后要更新和替换的查询是

Update MyTable
SET myColumn = REPLACE(myColumn,
                       (SELECT SUBSTRING(myColumn, 0,  len(myColumn) - CHARINDEX('/',REVERSE(myColumn)) +1 )
                        FROM MyTable),
                       '/1/2/3')

但它给出了以下错误

子查询返回的值超过1。 当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,不允许这样做。

我怀疑我的子查询的输出中不包含引号'...',如何将其放入,否则还有什么问题呢?

你能试试这个吗:

UPDATE myTable
SET myColumn = '/1/2/3/' + REVERSE(SUBSTRING(REVERSE(myColumn),0,CHARINDEX('/',REVERSE(myColumn))))

它应该在前面插入/1/2/3/ ,并将该部分保留在原始列值的最后/之后。

编辑:

顺便说一句,如果删除了SELECT FROM部分,您的查询也将起作用。

UPDATE myTable
SET myColumn = REPLACE(myColumn, SUBSTRING(myColumn, 0, len(myColumn) - CHARINDEX('/',REVERSE(myColumn)) +1), '/1/2/3')

问题是,带有select的查询返回了表中的所有行,并尝试使用子查询中的值更新单行值。 这就是为什么您会出错。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM