MySQL在X个字符之后更新记录的一部分

时间:2019-03-09 16:20:49

标签: mysql updates

假设我有一条类似https://stackoverflow.com//questions/的记录,以某种方式发生了,我想将记录更新为https://stackoverflow.com/questions/

到目前为止,我已经考虑过替换每次出现的//,但这也会把https://的部分替换为http:/

我已通过以下方式识别了所有损坏的记录:

SELECT TRIM(TRAILING SUBSTRING_INDEX(url, '//', -1) FROM url) FROM table_name WHERE length(TRIM(TRAILING SUBSTRING_INDEX(url, '//', -1) FROM url)) > 8;

这将检查8个字符,以便跳过所有http://https://出现。在这种情况下,目前有302个网址。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

检查:

SET @val = 'https://stackoverflow.com//questions/';

select 
  concat(
    substr(@val, 1, instr(@val, '//') + 1), 
    replace(substr(@val, instr(@val, '//') + 2),'//', '/')
)

它用//替换第1次出现的所有/
参见demo
因此,您可以在更新中使用它:

update tablename
set mycolumn = concat(
        substr(mycolumn, 1, instr(mycolumn, '//') + 1), 
        replace(substr(mycolumn, instr(mycolumn, '//') + 2),'//', '/')
)

答案 1 :(得分:1)

更换两次。

问题是https://也变成了https:/吗? 仅表示您需要再次添加1个丢失的斜杠。

UPDATE yourtable
SET url = REPLACE(REPLACE(url,'//','/'),':/','://')
WHERE url LIKE '%://%//%'