MySQL - 使用CHAR_LENGTH条件更新

时间:2012-06-14 15:14:02

标签: mysql sql-update

我有数千行包含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。

2 个答案:

答案 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;

Demo

答案 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

Demo