MySQL替换 - 操纵字符串

时间:2016-02-25 11:45:27

标签: mysql

在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=%'

是否有直接的方法来实现此操作?

2 个答案:

答案 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可能会有所帮助。