82

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

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

我现在有这个:

12345678
1234567

我需要这个:

12345678
01234567
4

4 回答 4

182

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

或者

采用LPAD()

SELECT LPAD('1234567', 8, '0');
于 2012-06-22T22:48:47.727 回答
31

可能:

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');

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

参考:

于 2012-06-22T22:49:31.377 回答
5

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

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

我只是在phone_num.

于 2018-09-25T00:59:44.707 回答
0

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

UPDATE
    mytable
SET
    mycolumn = CONCAT(
        REPEAT(
            "0",
            8 - LENGTH(mycolumn)
        ),
        mycolumn
    )
WHERE
    LENGTH(mycolumn) < 8;
于 2021-01-22T02:32:43.843 回答