2013-07-12 45 views
0

我应该在第一串与CONCAT MySQL的更新没有工作

前加一个零,我选择我的数据来验证

mysql> SELECT cp, LENGTH(cp), CONCAT(0, `cp`) FROM communes WHERE LENGTH(cp) < 5 
ORDER BY cp ASC LIMIT 4; 
+------+------------+-----------------+ 
| cp | LENGTH(cp) | CONCAT(0, `cp`) | 
+------+------------+-----------------+ 
| 1000 |   4 | 01000   | 
| 1000 |   4 | 01000   | 
| 1000 |   4 | 01000   | 
| 1090 |   4 | 01090   | 
+------+------------+-----------------+ 
4 rows in set (0.03 sec) 

,它工作得很好。

在第二,我尝试更新

mysql> UPDATE communes SET cp = CONCAT(0,`cp`) WHERE LENGTH(cp) < 5; 
Query OK, 0 rows affected (0.07 sec) 
Rows matched: 3447 Changed: 0 Warnings: 0 

我不明白为什么它没有为信息

mysql> describe communes; 
+------------+--------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+------------+--------------+------+-----+---------+----------------+ 
| id   | int(10)  | NO | PRI | NULL | auto_increment | 
| title  | varchar(255) | NO |  | NULL |    | 
| cp   | int(6)  | NO |  | NULL |    | 
| dept  | varchar(255) | NO |  | NULL |    | 
| code_insee | int(11)  | NO |  | NULL |    | 
+------------+--------------+------+-----+---------+----------------+ 
5 rows in set (0.01 sec) 

工作

谢谢很多

+0

CP列是int类型。你需要使这个varchar/char –

回答

0

你的CP列是一个整数,而不是一个字符串,因此它总会被视为这样。如果您希望将6位数的格式更改为CHAR(6)。

+0

在第一个'SELECT'中,选择'LENGTH(cp)',这是一个整数4(我假设)。为什么这不适用于第二个“UPDATE”查询? – BLaZuRE

+0

是的,它现在工作 一个问题:为什么CONCAT使用SELECT并且没有更新? – cyphos

+0

@cyphos选择他的答案作为接受的答案,如果它是什么帮助你。不过,如果你的第一个查询给了你这些结果,我仍然觉得你的第二个查询应该可以工作。我还没有测试过。 – BLaZuRE

1

与下面的查询:

UPDATE communes 
SET cp = CONCAT(CAST(0 as char), `cp`) 
WHERE LENGTH(cp) < 5; 

您必须转换Numberchar("CAST")