我有一个 CSV 文件以 CSV 格式发送给我。感兴趣的字段是 8 位数字。其中一些以 0 开头。该字段以数字形式发送。所以,我现在已经去掉了一些前导零。
我已经将该字段转换为 varchar。我现在需要这样做:
我现在有这个:
12345678
1234567
我需要这个:
12345678
01234567
可能:
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');
那么,这应该保留前导零;不利的一面是该列不再是严格的数字类型;因此您可能必须强制执行更严格的验证(取决于您的用例)以确保非数字不会输入该列。
参考:
将电话号码数据从 excel 导入 mysql 数据库时,我遇到了类似的问题。所以一个简单的技巧不需要识别电话号码的长度(因为电话号码的长度在我的数据中有所不同):
UPDATE table SET phone_num = concat('0', phone_num)
我只是在phone_num
.
以前的答案使用LPAD()
是最佳的。但是,如果您想要进行特殊或高级处理,这里有一种方法可以对填充进行更多的迭代控制。也可以作为使用其他构造来实现相同目标的示例。
UPDATE
mytable
SET
mycolumn = CONCAT(
REPEAT(
"0",
8 - LENGTH(mycolumn)
),
mycolumn
)
WHERE
LENGTH(mycolumn) < 8;