将前导零添加到MySQL数据

时间:2014-04-01 08:20:32

标签: mysql sql

我在MySQL表中有一些需要清除的混乱数据。一切都应该是3或4个字符,而那些两个字符需要有一个前导零。

示例杂乱数据:

23
5351
142
91
4911
1514
53
931
984

应该是:

023
5351
142
091
4911
1514
053
931
984

我读过我应该使用ZEROFILL或LPAD,但是因为我的长度不同(3-4)我不确定这是否是最好的方法,我担心4个字符的数据会被缩短或者类似。我希望有一些方向 - 谢谢。

编辑:我应该补充一下,此列的类型是mediumint(2)。如果需要,我可以自由更改。

3 个答案:

答案 0 :(得分:1)

使用ZEROFILL,因为它可以满足您在长度超过3时不截断数据的要求。如果它短于3,则只填充0。

What is the benefit of zerofill in MySQL?

答案 1 :(得分:1)

  

我担心4个字符数据会被缩短或类似。

没有。除非您指定的填充长度小于当前数据长度,否则不会剪切数据。

确保使用LPAD给定的长度

示例

mysql> SELECT LPAD('hi',4,'??');
        -> '??hi' -- result is a string of length 4
-- result data will be cut if padding is less than data length
mysql> SELECT LPAD('hi',1,'??'); 
        -> 'h' -- result is a string of length 1

在数据上,您可以指定长度等于字段数据的最大长度。 如果您的数据支持的最大长度为4位,则为 试试这个:

SELECT field_name fv, LPAD( field_name, 4, '0' ) lfv from my_table;

结果如下:

+------+------+
| fv   | lfv  |
+------+------+
|   23 | 0023 |
| 5351 | 5351 |
|  142 | 0142 |
|   91 | 0091 |
| 4911 | 4911 |
| 1514 | 1514 |
|   53 | 0053 |
|  931 | 0931 |
|  984 | 0984 |
+------+------+

请参阅Documentation on LPAD

答案 2 :(得分:1)

LPAD是您想要的,但您只想将0添加到长度少于3个字符的数字,您可以执行以下操作:

update TABLE set COLUMN = LPAD(COLUMN, 3, '0') where COLUMN < 100