大家好我必须进行查询以确定一个数字在sql表中所属的范围,我正在做的是使用中间但是当你使用适用于最后一个值的最后一个值的值时是null它没有带来结果,我找到了一个解决方法,但我认为这不是最好的方法。以下是我正在尝试做的一个例子。
-- 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进行验证并为其赋值。
有没有其他方法可以解决这个问题。
答案 0 :(得分: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
答案 1 :(得分:0)
如果你坚持让NULL
作为最终值,那么一般情况下,除了检查空值之外别无他法。
但你可以做到
INSERT INTO #TMP
( RangeID, InitialValue, FinalValue )
VALUES
( 1, 100, 200 )
,( 2, 201, 300 )
,( 3, 301, 2147483647 )
2147483647是可能的最大整数。
编辑:我只是注意到,即302将失败您的测试。