0

こんにちは皆さん、SQL テーブルで数値が属する範囲を決定するためにクエリを作成する必要があります。結果が得られません。回避策を見つけましたが、これは最善の方法ではないと思います。以下は、私がやろうとしていることの例です。

-- Creando temporal 
CREATE TABLE #TMP
(
    RangeID         INT 
    ,InitialValue   INT NULL
    ,FinalValue     INT NULL
)


-- Insertar valores
INSERT INTO #TMP
    (   RangeID, InitialValue, FinalValue   )
VALUES
    (   1, 100, 200 )
    ,(  2, 201, 300 )
    ,(  3, 301, NULL )


-- Verificando temporal
SELECT * FROM #TMP 

-- Verificando los rangos
SELECT 
    * 
FROM 
    #TMP
WHERE
    301 between     InitialValue 
    AND FinalValue

--RETURNS NOTHING

SELECT 
    * 
FROM 
    #TMP
WHERE
    301 between     InitialValue 
    AND isnull(FinalValue,301+1) 


--RETURNS THE DESIRED RESULT 

-- Borrando temporal
DROP TABLE #TMP

問題は、最終値がnullの場合、isnullを使用して値を検証して割り当てる必要があることです。

この問題にアプローチする他の方法はありますか。

4

2 に答える 2

2

いくつかのオプション:

WHERE 301 between InitialValue AND isnull(FinalValue,9999) 
--Some value high enough to encompass all possible values

WHERE 301 >= Initial Value AND (301 <= FinalValue OR FinalValue IS NULL)
--Instead of between, use >= AND <=, and make exception for null upper limit
于 2013-10-09T18:21:37.007 に答える
0

最終値として保持することを主張する場合はNULL、いいえ、一般に null をチェックする以外に方法はありません。

しかし、あなたはできる

INSERT INTO #TMP
    (   RangeID, InitialValue, FinalValue   )
VALUES
    (   1, 100, 200 )
    ,(  2, 201, 300 )
    ,(  3, 301, 2147483647 )

2147483647 は可能な最大整数です。

編集:しかし、302があなたのテストに失敗することに気づきました。

于 2013-10-09T18:22:54.693 に答える