4

从列是无符号整数的表中选择所有行的好方法是什么,例如这里是一些伪sql

SELECT * FROM mytable WHERE mycolumn IS UNSIGNED INTEGER

因此,字符串 'abc' 和像 '12.3' 和 '12.0' 这样的数字不会匹配,但像 '123' 这样的整数会匹配。

mycolumn 是 text/varchar 类型

4

4 回答 4

9
SELECT * FROM mytable WHERE mycolumn REGEXP '^[0-9]+$'

这还不够简单吗?

于 2012-04-27T08:24:27.457 回答
2
select * from mytable  
where cast(mycolumn as int) = mycolumn 

更新示例

编辑

我没看到你有varchar专栏。试试这个:

select * from myTable 
where cast(cast(myColumn as decimal(8,2)) as signed) = 
      cast(myColumn as decimal(8,2))
于 2012-04-27T08:14:53.757 回答
0
SELECT * FROM mytable WHERE mycolumn = FLOOR(mycolumn)

//编辑:好的,由于指定了问题,这个答案不再适合。它将拒绝 12.3 但匹配 12 AND 12.0 (结果证明没有缩进)。

修改后的问题无法用数学方法解决,唯一的方法是匹配字符,就像 Robin Castlin 所做的那样。

于 2012-04-27T08:08:47.147 回答
0
create table test_int(
test_value varchar(5)
)

insert into test_int values('a')
insert into test_int values('1')
insert into test_int values('12.3')

select *
from test_int 
where isnumeric(
cast(test_value as varchar)) = 1

结果

1
12.3
于 2012-04-27T08:50:52.230 回答