Работа с интервалами PL/SQL

Baur
Дата: 16.03.2011 12:35:10
Всем привет,

Каким образом можно хранит данные в интервале, например между n - m (n<m| n&m = 1..24)
чтобы потом использовать в запросе
скажем
учитывать \ не учитывать, если данные попадает в промежуток n-m

Конечно, моно хранить данные как угодно
самое главное, чтобы это не влиял на скорость обработки запроса

пример
with t as (
           select '11-12' AS inrvl,5 AS val1 from dual union all
           select '9-20' inrvl, 22 val1 from dual union all
           select '9-21' inrvl, 8 val1 from dual union all           
           select '5-7' inrvl, 6 val1 from dual union all           
           select '6-23' inrvl, 11 val1 from dual union all                                 
           SELECT '22-24' inrvl, 23 val1 from dual
           )
SELECT inrvl, val1
  FROM t
 WHERE val1 BETWEEN to_number(substr(inrvl, 1, instr(inrvl, '-') - 1)) AND
       substr(inrvl, instr(inrvl, '-') + 1, length(inrvl) - instr(inrvl, '-'));
-2-
Дата: 16.03.2011 12:41:33
Baur
Конечно, моно хранить данные как угодно
самое главное, чтобы ...
чтобы не привлекать таких к дизайну БД.
Baur
Дата: 16.03.2011 12:46:35
-2-
Baur
Конечно, моно хранить данные как угодно
самое главное, чтобы ...
чтобы не привлекать таких к дизайну БД.


)))

Baur
Конечно, моно хранить данные как угодно
самое главное, чтобы ...


я имел в виду подходящим образом, чем n-m
пока есть время менять формат хранения inrvl
env
Дата: 16.03.2011 13:01:21
Baur,

а сделать два поля религия не позволяет?
Baur
Дата: 16.03.2011 13:09:35
env
Baur,

а сделать два поля религия не позволяет?


Конечно можно, скорее так и сделаю

with t as (
           select 11  AS inrvl1, 12 AS inrvl2,5 AS val1 from dual union all
           select 9  AS inrvl1,  20 inrvl2, 22 val1 from dual union all
           select 9  AS inrvl1,  21 inrvl2, 8 val1 from dual union all           
           select 5  AS inrvl1,  7 inrvl2, 6 val1 from dual union all           
           select 6  AS inrvl1,  23 inrvl2, 11 val1 from dual union all                                 
           SELECT 22  AS inrvl1,  24 inrvl2, 23 val1 from dual
           )
SELECT inrvl1, inrvl2, val1
  FROM t
 WHERE val1 BETWEEN inrvl1 AND inrvl2;

так проще, удобнее )))