将零添加到mySQL表行中的特定位置

时间:2013-04-25 10:24:59

标签: php mysql

我有一个mySQL表,里面有很多像这样的链接:

id - link
1 | index.php?video=12
2 | index.php?video=345
3 | index.php?video=6789
4 | index.php?video=123&other=variable
5 | www.site.com/index.php?video=456&other=variable

每个文字行一个链接。我想在数字之前添加零,但总共需要9个数字。所以video = 12将是video = 000000012而video = 6789将是video = 000006789。

有没有办法通过使用SQL查询来实现这一点?

编辑:提交的解决方案tombom工作正常,但如果我的链接没有video = x变量怎么办?

2 个答案:

答案 0 :(得分:3)

UPDATE yourTable
SET `link` = REPLACE(`link`, SUBSTRING(`link` from LOCATE('=', `link`) + 1), RIGHT(CONCAT('000000000', SUBSTRING(`link` from LOCATE('=', `link`) + 1)), 9))

在sqlfiddle中看到它正常工作here

<强>更新

  

如果我有更多网址变量的链接怎么办?喜欢:index.php?video = 123&amp; play = 1&amp; search = hello

这有点棘手,但是你走了:

UPDATE yourTable
SET `link` = replace(`link`, substring(`link`, locate('=', `link`) + 1, ABS(locate('&', `link`) - locate('=', `link`) - 1)), right(concat('000000000', substring(`link`, locate('=', `link`) + 1, ABS(locate('&', `link`) - locate('=', `link`) - 1))), 9))

或者你可以这样做一点:

UPDATE yourTable
SET `link` = , CONCAT(SUBSTRING_INDEX(`link`, '=', 1),'=', LPAD(SUBSTRING(`link` from locate('=', `link`) + 1),9,'0'))

请参阅sqlfiddle

答案 1 :(得分:0)

UPDATE table1 SET `link` = CONCAT(SUBSTRING_INDEX(`link`, '=', 1),'=', LPAD(SUBSTRING_INDEX(`link`, '=', -1),9,'0'))

请参阅sqlfiddle