用于标识范围表中数字位置的SQL查询
大家好,我必须做一个查询来确定一个数字在sql表中所属的范围,我正在做的是使用一个介于之间的值,但是当您使用一个应用于最后一个范围的值,其中最终值为null时,它不会产生结果,我找到了一个解决方法,但我认为这不是最好的方法。下面是我试图做的一个例子用于标识范围表中数字位置的SQL查询,sql,sql-server-2008-r2,Sql,Sql Server 2008 R2,大家好,我必须做一个查询来确定一个数字在sql表中所属的范围,我正在做的是使用一个介于之间的值,但是当您使用一个应用于最后一个范围的值,其中最终值为null时,它不会产生结果,我找到了一个解决方法,但我认为这不是最好的方法。下面是我试图做的一个例子 -- Creando temporal CREATE TABLE #TMP ( RangeID INT ,InitialValue INT NULL ,FinalValue INT 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来验证并为其赋值
是否有其他方法解决此问题。两个选项:
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
其中301在InitialValue和isnull之间(FinalValue,9999)
--某些值高到足以包含所有可能的值
其中301>=初始值和(301=和如果坚持将NULL
作为最终值,则通常没有其他方法,只能检查NULL
但你可以做到
INSERT INTO #TMP
( RangeID, InitialValue, FinalValue )
VALUES
( 1, 100, 200 )
,( 2, 201, 300 )
,( 3, 301, 2147483647 )
2147483647是可能的最大整数
编辑:但是,我刚刚注意到,即302将无法通过您的测试。请用您正在使用的特定DBMS标记您的问题。我使用的是sql server 2008 R2,如果输入值为400,您希望得到什么结果?结果应该是该值属于数字范围3,因为我想在tha中使用nullt范围表示大于301的任何值