Есть ли целочисленные диапазоны для условия Where? - PullRequest
8 голосов
/ 16 июля 2009

Мне нужно проверить, что результат выражения в предложении где находится в диапазоне целых чисел.

что-то вроде этого:

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

С (1..8), представляющим диапазон целых чисел.

Я имею в виду, что это должно быть целое число, а не число с плавающей точкой. Так что я не могу использовать between 1 and 8, потому что 1.2 будет правильным.

Ответы [ 5 ]

10 голосов
/ 16 июля 2009

Конечно, вы можете сделать это:

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 голос
/ 16 июля 2009

Как насчет

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

Это просто проверяет, находится ли дробь в интервале, и целое.

0 голосов
/ 16 июля 2009

Вы можете использовать функцию конвейера для генерации целочисленного диапазона.

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)));
0 голосов
/ 16 июля 2009

Чтобы проверить, что col1 / col2 - это целое число, вы можете изменить их вместе ...

Где (col1 / col2) = (col1 \ col2) и (col1 / col2) от 1 до 8

0 голосов
/ 16 июля 2009

Вы можете разыграть его из числа с плавающей точкой в ​​int и использовать between. (Возможно, вы захотите создать виртуальный / вычисляемый столбец в зависимости от производительности запроса.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...