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


75

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

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

我现在有这个:

12345678
1234567

我需要这个:

12345678
01234567

Answers:



28

可能:

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

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

参考文献:


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

3

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

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

我只是在前面掩盖了0 phone_num


2
否,因为取决于设置和字段类型(字符),您可能会遇到错误1406:“数据对于列...来说太长了”
西里尔·提花
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.