Доступные версии документации

Интервальный предикат

Функция

Определение сравнения вида «условие-диапазон».

Спецификация
 
Синтаксические правила
  1. Типы всех <значимых выражений> должны быть совместимыми.

    Salary*(Age -30) BETWEEN 0 AND 52*3500*10
  2. Для значений типов CHAR и VARCHAR проверяется совпадение кодировок, при несовпадении преобразование типов не выполняется.

  3. <Интервальный запрос> не должен возвращать множественное значение.

    select "Наименование",count(*) from "Наличие" where "Цена" BETWEEN select min(sum) from "Прейскурант"
    and select avg(sum) from "Прейскурант";
    create or replace table tst(i int, c char(5));
    insert into tst (values (1, '11111');
    insert into tst (values (2, '22222');
    insert into tst (values (3, '33333');
    insert into tst (values (4, '44444');
    insert into tst (values (5, '55555');
    
    select count(*) from  tst
    where i between  (values(2)) and (values(4));
    |         3|
    create or replace table tst1(i int);
    insert into tst1 (values (2);
    insert into tst1 (values (4);
    
    select count(*) from  tst
    where i between  (table tst1 where rowid=1) and (table tst1 where rowid=2);
    |         3|
  4. Выражение:

    <значимое выражение> BETWEEN <нижняя граница> AND <верхняя граница>
    эквивалентно:
    <значимое выражение> >= <нижняя граница> AND
    <значимое выражение> <= <верхняя граница>

    Эквивалентные конструкции:

    select count(*) from auto where cylnders between 10 and 12;
    
    select count(*) from auto where cylnders>=10 and cylnders<=12;
  5. Выражение:

    <значимое выражение> NOT BETWEEN <нижняя граница>
    AND <верхняя граница>
    эквивалентно:
    NOT (<значимое выражение > BETWEEN <нижняя граница>
    AND <верхняя граница>)

    Эквивалентные конструкции:

    select count(*) from auto where cylnders not between 10 and 12;
    
    select count(*) from auto where not cylnders between 10 and 12;
  6. Опция SYMMETRIC задаёт свойство симметричности интервальных границ, т.е. значение <интервального предиката> не должно зависеть от порядка задания границ интервала, например:

    значение предиката будет истинным в обоих случаях:

    between symmetric 1 and 3
    between symmetric 3 and 1
    
    create or replace table test( i1 int, i2 int, i3 int );
    insert into test values ( 1, 2, 3 );
    insert into test values ( 2, 3, 1 );
    insert into test values ( 3, 1, 2 );
    insert into test values ( 1, 3, 0 );
    
    select * from test where i1 between symmetric 4 and 2;
     I1          I2          I3
     --          --          --
    |          2|          3|          1|
    |          3|          1|          2|
    select * from test where i1 < 2 and i1 between symmetric i2 and i3;
     I1          I2          I3
     --          --          --
    |          1|          3|          0|
  7. Опция ASYMMETRIC задаёт свойство асимметричности интервальных границ, т.е. значение <интервального предиката> зависит от порядка задания границ интервала, например:

    значение предиката between asymmetric 1 and 3 – истинно,

    а предиката between asymmetric 3 and 1 – ложно

    select count(*) from auto  where 2 between asymmetric 1 and 3;
    |   1000|
    select count(*) from auto  where 2 between asymmetric 3 and 1;
    |      0|
    select count(*) from auto  where 2 between symmetric 3 and 1;
    |   1000|
  8. По умолчанию (если опции симметричности не заданы) используется ASYMMETRIC.

Заметили ошибку?
Выделите текст и нажмите Ctrl + Enter