在mysql表中有一个包含相对网址和其他网址的列,我想将最后一位数字跳过10000(对于相对网址)
...
index.php?option=com_content&view=article&id=220
index.php?option=com_content&view=article&id=221
index.php?option=com_content&view=article&id=222
http://somerandomurl.com
index.php?option=com_content&view=article&id=227
http://anotherrandomurl.com
...
我知道如何替换字符串的固定部分,但我仍然不知道如何以编程方式更改字符串的某些部分,以便产生这种模式
...
index.php?option=com_content&view=article&id=10220
index.php?option=com_content&view=article&id=10221
index.php?option=com_content&view=article&id=10222
http://somerandomurl.com
index.php?option=com_content&view=article&id=10227
http://anotherrandomurl.com
...
UPDATE url_table
SET url_field = REPLACE ?????????
WHERE url_field LIKE '%index.php?option=com_content&view=article&id=%'
是否有直接的方法来实现此操作?
答案 0 :(得分:1)
如果号码总是3位数,那么您可以使用:
UPDATE url_table
SET url_field = replace(url_field,right(url_field,3),right(url_field,3)+10000)
WHERE url_field = LIKE '%index.php?option=com_content&view=article&id=%'
我不确定mysql如何处理字符串类型列中的数字,所以如果它不接受它:
UPDATE url_table
SET url_field = replace(url_field,right(url_field,3),
cast(right(url_field,3) to number) +10000 to string)
WHERE url_field = LIKE '%index.php?option=com_content&view=article&id=%'
答案 1 :(得分:0)
如果它总是需要插入右边的3位数,那么@ sagi的答案是正确的。但如果情况并非如此,那么你需要正则表达式。从版本10开始,MariaDB具有REGEXP_REPLACE函数,用于使用正则表达式替换字符串。如果您不使用MariaDB,This discussion可能会有所帮助。