我有数千行包含zipcode
属性,其中包含四个整数。
有些行包含5个整数,有些行包含2个或3个整数。
我想要做的是在仅包含四个整数的行之前添加0 。
表名是zipcode
,也是属性。
我想更新行而不显示它们!
我尝试了这段代码而没有运气(没有受影响的行):
UPDATE zipcode
SET zipcode = CONCAT('0', zipcode)
WHERE CHAR_LENGTH(zipcode) = 4
顺便说一句,我可以在一个简单的选择中使用CHAR_LENGTH,它可以工作:
SELECT *
FROM zipcode
WHERE CHAR_LENGTH(zipcode) = 4
所以,似乎CHAR_LENGTH
在我的WHERE
子句中不起作用。
编辑:zipcode
是一个int。
答案 0 :(得分:2)
听起来您将zipcode存储为int,但您确实希望将其视为char。
在这种情况下,您有几个选择:
1)更改列的数据类型,然后使用0:
执行对左侧焊盘的更新alter table zipcode
modify column zipcode char(5) not null;
update zipcode
set zipcode = lpad(zipcode,5,'0')
where char_length(zipcode) < 5;
2)保持数据类型不变,只需在select语句中使用0左侧填充格式化检索数据:
select lpad(zipcode,5,'0')
from zipcode;
答案 1 :(得分:0)
我相信变量zipcode
的数据类型是INT,您希望以5位数格式显示所有邮政编码。为此,请使用以下内容。
SELECT zipcode as Actual,
CASE CHAR_LENGTH(zipcode)
WHEN 1 THEN CONCAT('0000', zipcode)
WHEN 2 THEN CONCAT('000', zipcode)
WHEN 3 THEN CONCAT('00', zipcode)
WHEN 4 THEN CONCAT('0', zipcode)
END AS "Final"
FROM zipcode