Primeiro você precisa de uma tabela checkRanges
CREATE TABLE checkRanges
([checkID] int, [name] varchar(8), [low] int, [upper] int);
INSERT INTO checkRanges
([checkID], [name], [low], [upper])
VALUES
(1, '0-3', 0, 2),
(2, '3-6', 3, 5),
(4, '6-9', 6, 8),
(8, '9-12', 9, 11),
(16, '12+', 12, 999)
Veja como
checkID
são potência de 2? Em seu aplicativo, se o usuário selecionar
3-6
e 9-12
você envia 2+8 = 10
para o seu banco de dados. Também seria ótimo se você criasse sua caixa de seleção usando as informações do banco de dados. Em seu banco de dados você faz uma comparação bit a bit para selecionar os intervalos corretos. Em seguida, faça o entre com cada intervalo.
WITH ranges as (
SELECT *
FROM checkRanges
where checkID & 10 > 0
)
SELECT *
FROM users u
inner join ranges r
on u.Experience between r.low and r.upper
Veja tudo junto Demonstração do SQL Fiddle Eu incluo mais usuários. Você só precisa alterar a cláusula
where checkID & 10 > 0
para testar outra combinação. OBSERVAÇÃO:
Eu atualizo os intervalos. Altere o valor superior para
value - 1
porque between
é inclusivo e pode dar resultados duplicados. Se quiser usar a versão antiga, você deve substituir o
between
na frase de junção para u.Experience >= r.low and u.Experience *<* r.upper