如何检查列值是否包含整数

时间:2013-11-22 06:12:29

标签: mysql

我们有一个varchar(255)列,有些值是整数,我如何只隔离包含整数值的行

3 个答案:

答案 0 :(得分:2)

您可以使用CAST()执行此操作:

SELECT * FROM t WHERE CAST(col AS SIGNED)=col

可以使用REGEXP()来解决您的问题,但我不建议这样做:对于大型表CAST(),速度会非常快。比较:

mysql> select benchmark(1E7, '17453454.6655744' REGEXP '^[0-9]+$');
+------------------------------------------------------+
| benchmark(1E7, '17453454.6655744' REGEXP '^[0-9]+$') |
+------------------------------------------------------+
|                                                    0 |
+------------------------------------------------------+
1 row in set (17.59 sec)

使用:

mysql> select benchmark(1E7, CAST('17453454.6655744' AS SIGNED)='17453454.6655744');
+-----------------------------------------------------------------------+
| benchmark(1E7, CAST('17453454.6655744' AS SIGNED)='17453454.6655744') |
+-----------------------------------------------------------------------+
|                                                                     0 |
+-----------------------------------------------------------------------+
1 row in set, 1 warning (0.36 sec)

- 看看差异。

答案 1 :(得分:2)

这应该有用。

select *
from table
where column
regexp '^\-?[1-9][0-9]*$'

编辑:感谢Alma Do指出我的解决方案没有考虑签名整数和前导零!此外,他的解决方案比使用正则表达式更具性能。

答案 2 :(得分:0)

这里col意味着,必须提供必须检查的列名,是否有插入...?

SELECT * FROM t WHERE CAST(col AS SIGNED)= col