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)

//編集: OK、質問が指定されているため、この回答は適合しません。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 に答える