1

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

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

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

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

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

我可以在 PHPmyAdmin 中使用任何 SQL 语句以上述方式更新这个 country_id 列吗?

最好的祝福!

4

3 回答 3

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 
于 2012-12-12T18:09:04.413 回答
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 的任何值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

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

于 2012-12-12T18:14:09.963 回答
0
SELECT LPAD(country_id, 4, '0')
FROM your_table

如果您可以更改数据库结构,请使用ZEROFILL

于 2012-12-12T18:07:05.480 回答