Я не знаю простого способа использования SQLite, и вам, безусловно, было бы лучше реструктурировать все ваши столбцы range
в два столбца каждый, range_start
и range_end
.
Есливаши диапазоны являются фиксированными диапазонами, вы можете получить минимум / максимум из отдельной таблицы:
create table age_ranges (
name varchar(16) unique not null
, range_start integer unique not null
, range_end integer unique not null
);
insert into age_ranges (name, range_start,range_end) values ('60-64',60,64);
insert into age_ranges (name, range_start,range_end) values ('65+',65,999);
create table participant (
name varchar(16) unique not null
, age integer not null
, income integer not null
);
insert into participant (name, age, income) values ('Joe Blow', 65, 900);
insert into participant (name, age, income) values ('Jane Doe' , 61 , 1900)
;
create table question (
question varchar(64) not null
, relevant_age varchar(32) not null
);
insert into question (question,relevant_age) values('What is your favourite non-beige color?', '65+');
insert into question (question,relevant_age) values('What is your favourite car?', '60-64');
;
select
p.name,
q.question,
q.relevant_age
from participant p
join age_ranges r on (r.range_start <= p.age and p.age <= r.range_end)
join question q on q.relevant_age = r.name
SQL Fiddle
В качестве альтернативы, вы также можете попробовать проанализироватьначало диапазона и конец диапазона с использованием строковых функций, таких как LEFT()
и т. д., но производительность, скорее всего, будет плохой.