【问题标题】:MySQL adding leading numbers to existing IDs in a columnMySQL将前导数字添加到列中的现有ID
【发布时间】:2012-12-12 18:02:39
【问题描述】:

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

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

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

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

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

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

最好的问候!

【问题讨论】:

标签: mysql phpmyadmin sql-update


【解决方案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 

【讨论】:

    【解决方案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超过四个字符。如果一个值有一个前导“-”字符,这将导致一个奇怪的值,例如“00-4”。LTRIM 函数可用于删除前导空格。


    另一方面,如果country_id 是数字数据类型,那么您就不能真正添加​​前导零。

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

    country_id INT(4) ZEROFILL
    

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

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

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

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

    【讨论】:

      【解决方案3】:
      SELECT LPAD(country_id, 4, '0')
      FROM your_table
      

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

      【讨论】:

      • 感谢 ZEROFILL 的链接,它帮助我了解了如何在 PHPmyAdmin 中声明!
      猜你喜欢
      • 2016-07-04
      • 2012-01-22
      • 2016-07-17
      • 1970-01-01
      • 2011-02-03
      • 2019-06-12
      • 2020-06-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多