【问题标题】:Adding a leading zero to some values in column in MySQL在 MySQL 的列中为某些值添加前导零
【发布时间】:2012-06-25 06:40:38
【问题描述】:

我有一个以 CSV 格式发送给我的 CSV 文件。感兴趣的字段是 8 位数字。其中一些以 0 开头。该字段以数字形式发送。所以,我现在去掉了一些前导零。

我已经将该字段转换为 varchar。我现在需要这样做:

我现在有这个:

12345678
1234567

我需要这个:

12345678
01234567

【问题讨论】:

    标签: mysql sql database


    【解决方案1】:

    将字段改回数字并使用ZEROFILL 保留零

    使用LPAD()

    SELECT LPAD('1234567', 8, '0');
    

    【讨论】:

      【解决方案2】:

      可能:

      select lpad(column, 8, 0) from table;
      

      已编辑以回应 mylesg 的问题,在下面的 cmets 中:

      好的,似乎对查询进行了更改-但是如何使其永久粘贴(更改)在表中?我尝试了 UPDATE 而不是 SELECT

      我假设您使用的查询类似于:

      UPDATE table SET columnName=lpad(nums,8,0);
      

      如果这成功了,但表的值仍然没有前导零,那么我建议您可能将该列设置为数字类型?如果是这种情况,那么您需要更改表格,以便该列属于 text/varchar() 类型,以保留前导零:

      第一:

      ALTER TABLE `table` CHANGE `numberColumn` `numberColumn` CHAR(8);
      

      其次,运行更新:

      UPDATE table SET `numberColumn`=LPAD(`numberColum`, 8, '0');
      

      那么,这应该保留前导零;不利的一面是该列不再是严格的数字类型;因此您可能必须强制执行更严格的验证(取决于您的用例)以确保非数字不会输入该列。

      参考资料:

      【讨论】:

      • 好的,似乎对查询进行了更改-但是如何使其永久粘贴(更改)在表中?我尝试了 UPDATE 而不是 SELECT。
      【解决方案3】:

      在将电话号码数据从 excel 导入 mysql 数据库时,我遇到了类似的问题。所以一个不需要识别电话号码长度的简单技巧(因为电话号码的长度在我的数据中有所不同):

      UPDATE table SET phone_num = concat('0', phone_num) 
      

      我只是在phone_num前面加了0。

      【讨论】:

      • 否,因为根据设置和字段类型 (char),您可能会遇到错误 1406:“Data too long for column...”
      【解决方案4】:

      使用LPAD() 的先前答案是最佳的。但是,如果您想要进行特殊或高级处理,这里有一种方法可以对填充进行更多的迭代控制。也可以作为使用其他构造来实现相同目标的示例。

      UPDATE
          mytable
      SET
          mycolumn = CONCAT(
              REPEAT(
                  "0",
                  8 - LENGTH(mycolumn)
              ),
              mycolumn
          )
      WHERE
          LENGTH(mycolumn) < 8;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-01
        • 1970-01-01
        • 2020-06-07
        • 2022-07-31
        • 1970-01-01
        • 1970-01-01
        • 2016-05-16
        相关资源
        最近更新 更多