sql >> データベース >  >> RDS >> Sqlserver

範囲からのフィルター エクスペリエンスの TSQL

    まず、テーブル 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)
      

    checkID の方法を見る は 2 の累乗ですか?

    アプリでユーザーが 3-6 を選択した場合 と 9-12 2+8 = 10 を送信します あなたのデータベースに。また、データベース情報を使用してチェック ボックスを作成すると便利です。

    データベースでは、正しい範囲を選択するためにビットごとの比較を行います。次に、各範囲でその間を実行します。

    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
      

    SQL Fiddle Demo をまとめてご覧ください より多くのユーザーを含めます。 where checkID & 10 > 0 句を変更するだけです。 他の組み合わせをテストします。

    注:
    範囲を更新しました。上限値を value - 1 に変更します betweenだから 包括的であり、結果が重複する可能性があります。

    古いバージョンを使用したい場合は、 betwewen を置き換える必要があります 結合文で

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


    1. 名前付きキューでのSqlDependencyの使用

    2. SQLFiddleでPL/SQLを取得する方法は?

    3. あなたのデータベースがもはやあなたのために働いていないことの兆候

    4. 頻繁に変更されないクエリの結果をキャッシュするための最良の手法