Where子句是否有整数范围?

时间:2009-07-16 13:51:20

标签: sql oracle

我需要检查where子句在整数范围内的表达式结果。

有点像这样:

select * from table where (col1 / col2 ) in (1..8). 

(1..8)代表一系列整数。

我的意思是它必须是整数,而不是浮点数。所以我不能使用between 1 and 8,因为1.2是正确的。

5 个答案:

答案 0 :(得分:10)

你当然可以这样做:

select * from table where (col1 / col2 ) in (1,2,3,4,5,6,7,8);

select * from table where (col1 / col2 ) between 1 and 8
and mod (col1 , col2 ) = 0;

答案 1 :(得分:1)

怎么样

select * 
from table
where (col1 / col2 ) BETWEEN 1 AND 8
  and (col1 / col2 ) = FLOOR(col1 / col2 )

这只是检查分数是否在区间整数。

答案 2 :(得分:0)

您可以将它从float转换为int并使用between。 (您可能希望根据查询的性能创建虚拟/计算列。)

答案 3 :(得分:0)

要测试col1 / col2是一个整数,你可以将它们一起修改......

其中(col1 / col2)=(col1 \ col2)和(col1 / col2)介于1和8之间

答案 4 :(得分:0)

您可以使用管道功能生成整数范围。

create or replace type my_number_collection is table of number;

create or replace function
  gen_range (p_from in number, p_to in number)
  return my_number_collection
  PIPELINED
  as
  begin
    for i in p_from..p_to loop
      pipe row(i);
    end loop;
    return;
  end;
/

select *
from my_table 
where col1/col2 in (select column_value from table(gen_range(1,8)));