【发布时间】:2019-10-04 05:45:09
【问题描述】:
我有一个字段oldCol,其中包含由,(逗号)分隔的字符串。我刚刚发现这很不方便,因为 , 可以存在于 URL 中。所以我想用一个永远不会出现在像>这样的URL中的字符来替换它:
https://11.com/,http://2,2.com/
https://aa.com/,https://www.bb,b.com/,http://www.abcc.org/homePage
我要替换的分隔符逗号放在http 或https 之前。我不想更改原始列。所以我创建了一个新的newCol,我想将它的值设置为修改后的列。于是我写了:
UPDATE tbl
SET newCol = replace(oldCol, ',https://', '>https://');
但问题是上面的语句只捕获https://,我还需要同时用http://替换它们,所以newCol的值由oldCol组成,分隔符逗号转换为@987654334 @。即上例中的newCol为:
https://11.com/>http://2,2.com/
https://aa.com/>https://www.bb,b.com/>http://www.abcc.org/homePage
【问题讨论】:
-
在变得花哨之前,运行单独的查询有什么问题,一个
where oldCol like '%http:%'和一个'%https:%'?顺便说一句,我曾经创建了一个接受表达式的端点,它可以包含<和>。也许 tab char 是一个更可靠的选择 -
谢谢。但是使用制表符不合适,因为我需要一个字符,因为该列已经在一些具有复杂正则表达式的查询中使用。我只想用
>替换逗号。无法进行两个UPDATE SET查询。每个SET都会覆盖前一个。所以如果我UPDATE SET列的正确值应该一次性准备好。就像INSERT。最后,对不起,我不明白btw I once created an endpoint that accepted expressions, which could contain both < and >的意思。以前使用>是否给您带来过问题?它以前如何?请澄清。 -
@Bohemian 请检查问题。我不想只是查询。不,我想修改一列并将修改后的列插入新列。
-
如果添加 where 子句,您将不会“更新两次”
标签: mysql sql database database-design mysql-workbench