sql >> Database teknologi >  >> RDS >> Sqlserver

TSQL For Filter Experience From Range multiselect

Først skal du bruge en tabel 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)

Se hvordan checkID er power of 2?

Hvis brugeren i din app vælger 3-6 og 9-12 du sender 2+8 = 10 til din db. Det ville også være fantastisk, hvis du opretter dit afkrydsningsfelt ved hjælp af db info.

I din DB laver du en bitvis sammenligning for at vælge de rigtige områder. Udfør derefter mellem med hvert område.

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

Se det hele sammen SQL Fiddle Demo Jeg inkluderer flere brugere. Du skal kun ændre klausulen where checkID & 10 > 0 for at teste en anden kombination.

BEMÆRK:
Jeg opdaterer intervallerne. Skift den øvre værdi til value - 1 fordi between er inkluderende og kan give dobbelte resultater.

Hvis du vil bruge den gamle version, skal du erstatte betwewen i sammenføjningssætningen til

u.Experience >= r.low and u.Experience *<* r.upper



  1. script til manglende tal virker ikke?

  2. MySQL fejl - #1062 - Dublet indtastning ' ' for nøgle 2

  3. Mysql Dayofyear i skudår

  4. Hvorfor gemmer sql-server tegn på spørgsmålstegn i stedet for japanske tegn i NVarchar-felter?