【发布时间】:2014-06-16 21:13:58
【问题描述】:
如果我有一个以数字开头的字符串,然后包含非数字字符,则在 MySQL 中将此字符串转换为整数将转换字符串的第一部分,并且不会表明它遇到任何问题!这很烦人。
例如:
SELECT CAST('123' AS UNSIGNED) AS WORKS,
CAST('123J45' AS UNSIGNED) AS SHOULDNT_WORK,
CAST('J123' AS UNSIGNED) AS DOESNT_WORK
返回:
+-------------+---------------+-------------+
| WORKS | SHOULDNT_WORK | DOESNT_WORK |
+-------------+---------------+-------------+
| 123 | 123 | 0 |
+-------------+---------------+-------------+
这对我来说没有任何意义,很明显,123J45 不是一个数字,当然也不等于 123。这是我的用例:
我有一个包含(一些格式错误的)邮政编码的字段。可能存在输入错误、缺少数据等,从我的角度来看,这没关系。因为另一个表将邮政编码存储为整数,所以当我加入这些表时,我需要将字符串邮政编码转换为整数(如果我采用另一种方式,我将不得不用0s 填充)。但是,如果出于某种原因有一个条目包含6023JZ1,我不可能希望将其解释为邮政编码06023。我很高兴6023JZ1 被映射到NULL。不幸的是,IF(CAST(zipcode AS UNSIGNED) <= 0, NULL, CAST(zipcode AS UNSIGNED)) 因上述问题而无法工作。
我该如何控制呢?
【问题讨论】:
-
不是将字符串转换为整数,而是将整数转换为字符串。 Zip codes are not integers.
-
@DourHighArch,完全同意。射击首先将邮政编码存储为整数的人。您上一次需要查找邮政编码的总和或计算邮政编码的复利是什么时候?
标签: mysql string casting integer