我有一个名为 country_id 的 mysql 数据库列,例如:
country_id
----------
1
2
59
435
2714
我现在要完成的是为每个 ID 添加前导零,因此结果将是:
country_id
----------
0001
0002
0059
0435
2714
每个 ID 最多应有 4 位数字。就是这样。
我可以在 PHPmyAdmin 中使用任何 SQL 语句以上述方式更新这个 country_id 列吗?
最好的祝福!
我有一个名为 country_id 的 mysql 数据库列,例如:
country_id
----------
1
2
59
435
2714
我现在要完成的是为每个 ID 添加前导零,因此结果将是:
country_id
----------
0001
0002
0059
0435
2714
每个 ID 最多应有 4 位数字。就是这样。
我可以在 PHPmyAdmin 中使用任何 SQL 语句以上述方式更新这个 country_id 列吗?
最好的祝福!
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
如果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 的任何值country_id
超过 4 个字符,则这些语句中的任何一个都将导致数据丢失......第一个获取最右边的字符,第二个将获取最左边的四个字符,如果 country_id 超过四个字符。如果一个值有一个前导“-”字符,这将导致一个奇怪的值,例如“00-4”。LTRIM 函数可用于删除前导空格。
另一方面,如果country_id
是数字数据类型,则不能真正添加前导零。
对于整数类型,您可以指定显示长度和 ZEROFILL 选项,例如
country_id INT(4) ZEROFILL
但是由客户端应用程序使用长度修饰符和 ZEROFILL 属性来执行指定的格式设置,实际上并没有在“数据库中”使用这些属性进行任何操作。(MySQL 命令行客户端将观察这些设置,并显示填充到最多四个字符的值零。但其他客户端不需要这样做。)
您还可以将该值转换为字符并在查询中使用前导 '0' 字符填充它:
SELECT LPAD(country_id, 4, '0') AS country_id
但请注意,这将返回字符类型,而不是数字。
SELECT LPAD(country_id, 4, '0')
FROM your_table
如果您可以更改数据库结构,请使用ZEROFILL