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

时间:2015-07-01 10:03:19

标签: sql replace substring

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

/ A / B / C /无论什么是不固定的,是动态的,需要替换为 / 1/2/3 /无论,我喜欢更改下面的内容,保留最后 / 后的最后一部分。

/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 and REPLACE part of a string 理解的

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。这是不允许的   子查询跟随=,!=,<,< =,>,> =或当子查询用作   表达。

我怀疑我的子查询的输出不包含引号'...',如何设置或其他问题是什么?

1 个答案:

答案 0 :(得分: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的查询返回表中的所有行,并尝试使用子查询中的值更新单行值。这就是你收到错误的原因。