在MySQL的列中为某些值添加前导零

时间:2012-06-22 22:46:56

标签: mysql sql database

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

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

我现在有这个:

12345678
1234567

我需要这个:

12345678
01234567

4 个答案:

答案 0 :(得分:147)

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

使用LPAD()

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

答案 1 :(得分:22)

可能:

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

已编辑以回复mylesg提出的问题,在下面的评论中:

  好吧,似乎对查询进行了更改 - 但是如何在表格中永久保留(更改)?我尝试了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');

然后,这应该保留前导零;缺点是该列不再严格地是数字类型;所以你可能必须强制执行更严格的验证(取决于你的用例),以确保不会在该列中输入非数字。

参考文献:

答案 2 :(得分:0)

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

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

我只是在phone_num前面加上了0。

答案 3 :(得分:0)

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

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