我需要检查where子句在整数范围内的表达式结果。
有点像这样:
select * from table where (col1 / col2 ) in (1..8).
(1..8)
代表一系列整数。
我的意思是它必须是整数,而不是浮点数。所以我不能使用between 1 and 8
,因为1.2是正确的。
答案 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)));