当前位置: 首页 > 知识库问答 >
问题:

从列更新和替换字符串的起始部分

钮安歌
2023-03-14
**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

正确返回需要更换的零件

/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的值。当子查询如下时,这是不允许的=,!=,

我怀疑子查询的输出不包含引号“…”,怎么说呢,还有什么问题?

共有1个答案

亢雅懿
2023-03-14

你能试试这个吗

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

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

编辑:

顺便说一下,如果您从零件中删除了SELECT,您的查询也会起作用。

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

问题是,带有选择的查询返回了表中的所有行,并试图用子查询中的值更新单行值。这就是你出错的原因。

 类似资料:
  • 问题内容: 我在MySQL数据库中有一个带有以下各列的表 网址就像: 我想将所有网址更新到另一个域 保持文件名不变。 我必须运行什么查询? 问题答案:

  • 两行的一个例子是:([a,b,c],d)和([d,e],a)我想把这些行转换成([a,b,c],[d,e])和([d,e],[a,b,c]) dataframe的列名是“src”和“dst”。 我如何处理这个问题?

  • 我想要成功 用大括号()或[]替换的文本可从表1或表2中找到。 当前方法 如何改进代码跳过非必需循环?

  • 问题内容: 有没有更短的方法可以编写以下代码? 注意,我不需要替换那些确切的值。我只是在寻找一种将5条以上的线变成少于5条线的方法 问题答案: 看起来是使用循环的好机会: 如果您不介意括号,则更快的方法是:

  • 问题内容: 我得到了这个清单: 我想用一些与之相似的奇异值代替,从而得到一个新的清单: 问题答案: 这些称为列表推导。