MySQL的加入导致数以现有的ID在列(MySQL adding leading numbers t

2019-07-05 01:26发布

我有一个MySQL数据库指定的列COUNTRY_ID,如:

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

我想要现在做到的是加前导零的每一个ID,这样的结果将是:

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

每个ID应该有最多4个位数。 而已。

有没有我可以在phpMyAdmin使用更新上述方式这COUNTRY_ID列的任何SQL语句?

最好的祝福!

Answer 1:

声明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 


Answer 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个字符长...第一个得到righmost字符,第二个RTH获得四个最左边的字符,如果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

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



Answer 3:

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

如果你可以改变你的数据库结构使用ZEROFILL



文章来源: MySQL adding leading numbers to existing IDs in a column