我有一个以CSV格式发送给我的CSV文件。感兴趣的领域是8位数。其中一些以0开头。该字段是数字发送的。所以,我现在放弃了一些前导零。
我已经将字段转换为varchar。我现在需要这样做:
我现在有这个:
12345678
1234567
我需要这个:
12345678
01234567
答案 0 :(得分:147)
答案 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;