使用concat的MySQL更新未工作
我应该在字符串前加一个零 首先,我选择要验证的数据使用concat的MySQL更新未工作,mysql,concat,Mysql,Concat,我应该在字符串前加一个零 首先,我选择要验证的数据 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`) | +------+------------+-----------
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)
非常感谢您的CP列是一个整数而不是字符串,因此它将始终被视为整数。如果要将6位数字的格式更改为字符(6)。使用以下查询:
UPDATE communes
SET cp = CONCAT( CAST( 0 as char), `cp`)
WHERE LENGTH(cp) < 5;
更新公社
设置cp=CONCAT(将0转换为字符),`cp`)
式中,长度(cp)<5;
您必须将
Number
转换为char
(“CAST”)
选择,然后选择长度(cp)
,这是一个整数4(我假定)。为什么这对第二个UPDATE
查询不起作用?是的,它现在起作用了一个问题:为什么CONCAT使用SELECT而不使用UPDATE?@cyphos选择他的答案作为已接受的答案,如果这对您有帮助的话。然而,我仍然觉得,如果第一个查询给出了这些结果,那么第二个查询应该是有效的。不过我还没有测试。长度将隐式地将整数转换为字符以计算其大小。另一方面,更新会将varchar字符串转换为其整数值,因为它的类型是integer。尝试使用以下子句进行选择,其中1='000001'
或其中1='001.00'
甚至其中1.0='0001.00
它们都将返回true,因为它们都转换为相同的值类型感谢saamorim和BLaZuRE
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)
UPDATE communes
SET cp = CONCAT( CAST( 0 as char), `cp`)
WHERE LENGTH(cp) < 5;