假设我有一条类似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个网址。
我该如何解决这个问题?
答案 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 '%://%//%'