MySQL将前导数字添加到列中的现有ID

时间:2012-12-12 18:02:39

标签: mysql phpmyadmin sql-update

我有一个名为country_id的mysql数据库列,如:

country_id
----------
1
2
59
435
2714

我现在要完成的是为每个ID添加前导零,结果将是:

country_id
----------
0001
0002
0059
0435
2714

每个ID最多应有4位数字。就是这样。

我是否可以在PHPmyAdmin中使用任何SQL语句以上述方式更新此country_id列?

祝你好运!

3 个答案:

答案 0 :(得分:5)

在列上声明ZEROFILL

mysql> create table foobar (nr integer(4) ZEROFILL);
Query OK, 0 rows affected (0.31 sec)

mysql> INSERT INTO foobar VALUES (1),(12),(123),(1234),(12345);
Query OK, 5 rows affected (0.05 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM foobar;
|  0001 
|  0012 
|  0123 
|  1234 
| 12345 

答案 1 :(得分:2)

如果country_id列是字符数据类型(非数字),那么您可以添加零并取最右边的部分:

UPDATE foo SET country_id = RIGHT(CONCATENATE('0000',country_id),4)

UPDATE foo SET country_id = LPAD(country_id, 4, '0')

(注意:如果country_id的任何值超过4个字符,那么这些语句中的任何一个都会导致数据丢失......第一个获取最右边的字符,第二个将获得最左边的四个字符,如果country_id超过四个字符。如果一个值有ea前导' - '字符,那将导致奇怪的值,例如'00 -4'.LTRIM函数可用于删除前导空格。


另一方面,如果country_id是一个数值数据类型,那么你就无法真正添加前导零。

对于整数类型,您可以指定显示长度和ZEROFILL选项,例如

country_id INT(4) ZEROFILL

但是由客户端应用程序来决定使用长度修饰符和ZEROFILL属性来执行指定的格式化,实际上并没有“在数据库中”使用这些属性进行任何操作。 (MySQL命令行客户端将观察这些设置,并显示零值填充为最多四个字符。但其他客户端不需要这样做。)

您还可以将该值转换为字符,并在查询中使用前导“0”字符填充它:

SELECT LPAD(country_id, 4, '0') AS country_id

但请注意,它将返回一个字符类型,而不是数字。

答案 2 :(得分:0)

SELECT LPAD(country_id, 4, '0')
FROM your_table

如果您可以使用ZEROFILL

更改数据库结构