【问题标题】:How to replace two sub-strings in one field and insert the result in another field in MySQL如何替换一个字段中的两个子字符串并将结果插入MySQL中的另一个字段
【发布时间】: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

我要替换的分隔符逗号放在httphttps 之前。我不想更改原始列。所以我创建了一个新的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


【解决方案1】:

你可以替换两次:

UPDATE tbl
    SET newCol = replace(replace(oldCol, ',https://', '>https://'), ',http://', '>http://');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-02
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多