我在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)。如果需要,我可以自由更改。
答案 0 :(得分:1)
使用ZEROFILL,因为它可以满足您在长度超过3时不截断数据的要求。如果它短于3,则只填充0。
答案 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 |
+------+------+
答案 2 :(得分:1)
LPAD是您想要的,但您只想将0添加到长度少于3个字符的数字,您可以执行以下操作:
update TABLE set COLUMN = LPAD(COLUMN, 3, '0') where COLUMN < 100