MySQL中的cast
和convert
函数抛出'截断错误的INTEGER值'将字符串转换为整数值时:
select cast(mycolumn as unsigned) from mytable;
我想了解PHP和大多数其他编程语言的行为,这意味着我想将所有非数字字符串转换为零。
在MySQL中执行此操作的最有效方法是什么?
答案 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。