0

我有数千行包含一个包含zipcode四个整数的属性。有些行包含五个整数,而另一些包含两个或三个整数。

我想要做的是在只包含四个整数的行之前添加一个 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是一个整数。

4

2 回答 2

2

听起来您将邮政编码存储为 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;

演示

于 2012-06-14T16:07:00.130 回答
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

演示

于 2012-06-14T16:22:49.013 回答