Mysql:如何转换为整数,同时避免'截断错误的INTEGER值'对于非数字值

时间:2017-10-21 22:48:48

标签: mysql

MySQL中的castconvert函数抛出'截断错误的INTEGER值'将字符串转换为整数值时:

select cast(mycolumn as unsigned) from mytable;

我想了解PHP和大多数其他编程语言的行为,这意味着我想将所有非数字字符串转换为零。

在MySQL中执行此操作的最有效方法是什么?

3 个答案:

答案 0 :(得分:1)

这是mysql的行为,坦率地说,你无能为力。虽然,请注意,在select语句中,即使您处于严格的sql模式,也只会收到警告,而不是错误。因此,选择查询有点产生您期望的输出,您只需要发出警告。

但是,如果你想在更新语句中使用它,那么你需要关闭严格的sql模式 - 或者更好:你应该重新考虑你的logíc以避免将文本转换为数字。

答案 1 :(得分:1)

尝试下面的内容,如果你想摆脱那个警告(虽然不是必要的)

select if(mycolumn regexp '[^0-9]',0,cast(mycolumn as unsigned));

答案 2 :(得分:1)

作为发现此问题的人的参考:

如果您有MariaDB 10.0.5+或MySQL 8+,那么您可以使用REGEXP_SUBSTR()函数仅保留字符串的第一个数字。

SELECT REGEXP_SUBSTR('123foo', '^\\d+');
-> 123

注意:这与CAST()不同,因为'foo123'的结果是''而不是0。