Php 将零添加到mySQL表行中的特定位置
我有一个mySQL表,有很多这样的链接:Php 将零添加到mySQL表行中的特定位置,php,mysql,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 UPDATE yourTable SET `link` = , CONCAT(SUBSTRIN
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
UPDATE yourTable
SET `link` = , CONCAT(SUBSTRING_INDEX(`link`, '=', 1),'=', LPAD(SUBSTRING(`link` from locate('=', `link`) + 1),9,'0'))
每个文本行一个链接。我想在数字前加上零,但总共必须是九个数字。因此,video=12将是video=000000012,video=6789将是video=000006789
有没有办法通过使用SQL查询来实现这一点
编辑:tombom提交的解决方案运行良好,但是如果我有没有video=x变量的链接怎么办
UPDATE yourTable
SET `link` = REPLACE(`link`, SUBSTRING(`link` from LOCATE('=', `link`) + 1), RIGHT(CONCAT('000000000', SUBSTRING(`link` from LOCATE('=', `link`) + 1)), 9))
看它在sqlfiddle中实时工作
更新:
如果我有一些带有更多url变量的链接怎么办?比如:index.php?video=123&play=1&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))
或者你可以做得短一点,像这样:
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
UPDATE yourTable
SET `link` = , CONCAT(SUBSTRING_INDEX(`link`, '=', 1),'=', LPAD(SUBSTRING(`link` from locate('=', `link`) + 1),9,'0'))
看
请参见查看regex replace查看只存储ID号(12等)然后在输出时生成链接会更好。然后你可以用你使用的任何编程语言很容易地格式化这个,如果我有一些带有更多url变量的链接呢?比如:index.php?video=123&play=1&search=hello如果我有一些包含更多url变量的链接会怎么样?比如:index.php?video=123&play=1&search=hello@MikaelFrôding更新了我的答案。这很有效,但我发现我在那里隐藏了一些根本没有video=x变量的链接。那些链接搞砸了。我如何不将查询应用于它们?