MySQL在X多个字符后更新部分记录

MySQL在X多个字符后更新部分记录,mysql,updates,Mysql,Updates,假设我有一个类似https://stackoverflow.com//questions/,不知为什么发生了这种情况,我想将记录更新为https://stackoverflow.com/questions/ 到目前为止,我想替换出现的每一个/,但这也会破坏https://部分的http:// 我已通过以下方式识别所有损坏的记录: 从表_name中选择TRIM(url中的尾随子字符串_索引(url,“/”,-1),其中长度(TRIM(url中的尾随子字符串_索引(url,“/”,-1))>8;

假设我有一个类似
https://stackoverflow.com//questions/
,不知为什么发生了这种情况,我想将记录更新为
https://stackoverflow.com/questions/

到目前为止,我想替换出现的每一个
/
,但这也会破坏
https://
部分的
http://

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

从表_name中选择TRIM(url中的尾随子字符串_索引(url,“/”,-1),其中长度(TRIM(url中的尾随子字符串_索引(url,“/”,-1))>8;
这将在8个字符后进行检查,以便跳过所有出现的
http://
https://
事件。在这种情况下,目前有302个URL

如何解决此问题?

请检查:

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

select 
  concat(
    substr(@val, 1, instr(@val, '//') + 1), 
    replace(substr(@val, instr(@val, '//') + 2),'//', '/')
)
它将第一次之后出现的所有
/
替换为
/

请参见
因此,您可以在更新中使用它:

update tablename
set mycolumn = concat(
        substr(mycolumn, 1, instr(mycolumn, '//') + 1), 
        replace(substr(mycolumn, instr(mycolumn, '//') + 2),'//', '/')
)
选中此项:

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

select 
  concat(
    substr(@val, 1, instr(@val, '//') + 1), 
    replace(substr(@val, instr(@val, '//') + 2),'//', '/')
)
它将第一次之后出现的所有
/
替换为
/

请参见
因此,您可以在更新中使用它:

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

所以问题是
https://
也变成了
https://
? 只是意味着你需要再加上那条丢失的斜线

UPDATE yourtable
SET url = REPLACE(REPLACE(url,'//','/'),':/','://')
WHERE url LIKE '%://%//%'
更换两次

所以问题是
https://
也变成了
https://
? 只是意味着你需要再加上那条丢失的斜线

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

在这种情况下,你应该使用正则表达式而不是普通的字符串匹配函数。我想就是这样:我试试,谢谢你的建议。我忘记了MySQL中存在正则表达式。在这种情况下,你应该使用正则表达式而不是普通的字符串匹配函数。我想就是这样:我会试试,谢谢你的建议。我忘记了MySQL中存在正则表达式。我得到了一个
错误1064(42000):您的SQL语法有一个错误;检查与您的MariaDB服务器版本相对应的手册,以了解第4行的“”附近要使用的正确语法。可能是什么错误,我看不出来?我想update语句末尾还有一个括号。我编辑了。谢谢你的努力和帮助!我得到一个
错误1064(42000):您的SQL语法有一个错误;检查与您的MariaDB服务器版本相对应的手册,以了解第4行的“”附近要使用的正确语法。可能是什么错误,我看不出来?我想update语句末尾还有一个括号。我编辑了。谢谢你的努力和帮助!这是一个非常简单的解决方案,效果很好。非常感谢。谢谢。当然,这有一个小小的假设。协议后的url中未使用
:/
。但至少我从未见过这样的网址。所以这是一个可以接受的风险。这是一个非常简单的解决方案,效果很好。非常感谢。谢谢。当然,这有一个小小的假设。协议后的url中未使用
:/
。但至少我从未见过这样的网址。所以这是一个可以接受的风险。