sql >> Database >  >> RDS >> Sqlserver

TSQL voor filterervaring uit bereik multiselect

Eerst heb je een tabel checkRanges nodig

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)

Zie hoe checkID zijn macht van 2?

Selecteer in uw app als gebruiker 3-6 en 9-12 je stuurt 2+8 = 10 naar je db. Het zou ook geweldig zijn als u uw selectievakje maakt met behulp van de db-info.

In je db vergelijk je bitsgewijze om de juiste bereiken te selecteren. Voer vervolgens de tussen uit bij elk bereik.

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

Bekijk het allemaal samen SQL Fiddle-demo Ik neem meer gebruikers op. U hoeft alleen de clausule where checkID & 10 > 0 . te wijzigen om een ​​andere combinatie te testen.

OPMERKING:
Ik werk de bereiken bij. Verander de bovenste waarde in value - 1 omdat between is inclusief en kan dubbele resultaten opleveren.

Als u de oude versie wilt gebruiken, moet u de between . vervangen in de voegzin voor

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



  1. preg_replace() vindt eindscheidingsteken niet?

  2. Top 50 SQL Server-interviewvragen die u in 2022 moet voorbereiden

  3. Sla foutregels over tijdens het laden van gegevens naar mysql-tabel vanuit een gescheiden bestand

  4. Alle databases weergeven met ActiveRecord