更新和替换列中字符串的开始部分
Update and Replace a start part of string from a column
**MyTable**
*myColumn*
/A/B/C/XYZ
/A/B/C/abc
...
/A/B/C/whatever 不是固定的,是动态的,需要替换为 /1/2/3/whatever,我喜欢像下面这样更改它,将最后一部分保持在最后 / 之后。
/1/2/3/XYZ
/1/2/3/abc
...
我运行下面的查询
SELECT SUBSTRING(myColumn, 0, len(myColumn) - CHARINDEX('/',REVERSE(myColumn)) +1 )
FROM MyTable
正确returns需要更换的部分
/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')
但它给出了以下错误
Subquery returned more than 1 value. This is not permitted when the
subquery follows =, !=, <, <= , >, >= or when the subquery is used as
an expression.
我怀疑我的子查询的输出不包含引号 '...' ,如何放置或者还有什么问题?
你能试试这个吗:
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 的查询返回了 table 中的所有行,并试图用子查询中的值更新单行值。这就是你出错的原因。
**MyTable**
*myColumn*
/A/B/C/XYZ
/A/B/C/abc
...
/A/B/C/whatever 不是固定的,是动态的,需要替换为 /1/2/3/whatever,我喜欢像下面这样更改它,将最后一部分保持在最后 / 之后。
/1/2/3/XYZ
/1/2/3/abc
...
我运行下面的查询
SELECT SUBSTRING(myColumn, 0, len(myColumn) - CHARINDEX('/',REVERSE(myColumn)) +1 )
FROM MyTable
正确returns需要更换的部分
/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')
但它给出了以下错误
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
我怀疑我的子查询的输出不包含引号 '...' ,如何放置或者还有什么问题?
你能试试这个吗:
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 的查询返回了 table 中的所有行,并试图用子查询中的值更新单行值。这就是你出错的原因。