我有一个名为country_id的mysql数据库列,如:
country_id
----------
1
2
59
435
2714
我现在要完成的是为每个ID添加前导零,结果将是:
country_id
----------
0001
0002
0059
0435
2714
每个ID最多应有4位数字。就是这样。
我是否可以在PHPmyAdmin中使用任何SQL语句以上述方式更新此country_id列?
祝你好运!
答案 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
更改数据库结构