2013-07-12 42 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")