将前导零添加到MySQL列中的某些值
我有一个CSV文件以CSV格式发送给我。感兴趣的字段是8位数字。其中一些以0开头。该字段已发送数字。我现在去掉了一些前导零 我已经将该字段转换为varchar。我现在需要这样做: 我现在有:将前导零添加到MySQL列中的某些值,mysql,sql,database,Mysql,Sql,Database,我有一个CSV文件以CSV格式发送给我。感兴趣的字段是8位数字。其中一些以0开头。该字段已发送数字。我现在去掉了一些前导零 我已经将该字段转换为varchar。我现在需要这样做: 我现在有: 12345678 1234567 我需要这个: 12345678 01234567 将字段更改回数值,并使用以保留零 或 使用 可能: select lpad(column, 8, 0) from table; 编辑回答mylesg的问题,在下面的评论中: 好的,似乎对查询进行了更改-但是如何使它永
12345678
1234567
我需要这个:
12345678
01234567
将字段更改回数值,并使用以保留零 或 使用 可能:
select lpad(column, 8, 0) from table;
编辑回答mylesg的问题,在下面的评论中:
好的,似乎对查询进行了更改-但是如何使它永久地保留(更改)在表中?我尝试了更新而不是选择 我假设您使用的查询类似于:
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');
因此,这应该保留前导零;缺点是该列不再严格属于数字类型;因此,您可能必须执行更严格的验证(取决于您的用例),以确保该列中没有输入非数字
参考资料:
我刚刚在
电话号码前面加了0
前面使用LPAD()的回答是最佳的。但是,如果您想进行特殊或高级处理,这里有一种方法允许对填充进行更多的迭代控制。也可作为使用其他构造实现相同目标的示例
UPDATE
mytable
SET
mycolumn = CONCAT(
REPEAT(
"0",
8 - LENGTH(mycolumn)
),
mycolumn
)
WHERE
LENGTH(mycolumn) < 8;
更新
空白表
设置
菌柱=CONCAT(
重复(
"0",
8-长度(菌柱)
),
菌柱
)
哪里
长度(菌柱)<8;
ok,似乎对查询进行了更改-但如何使其永久地保留(更改)在表中?我尝试了更新而不是SELECT.no,因为根据设置和字段类型(char),可能会出现错误1406:“数据对于列来说太长…”
UPDATE table SET phone_num = concat('0', phone_num)
UPDATE
mytable
SET
mycolumn = CONCAT(
REPEAT(
"0",
8 - LENGTH(mycolumn)
),
mycolumn
)
WHERE
LENGTH(mycolumn) < 8;