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中未使用:/
。但至少我从未见过这样的网址。所以这是一个可以接受的风险。