我们有一个varchar(255)列,有些值是整数,我如何只隔离包含整数值的行
答案 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