在最小和最大之间搜索

时间:2012-09-12 05:42:32

标签: sql-server

假设我有以下数据库表

id     min     max
1        0       0
2        1      90
3       91     180
4      181     365
5      366       0

所以,我需要它发生的是这个;

如果我搜索0,如果我搜索id=1 (min=0, max=0);,我应该获得95,我应该id=3 (min=91, max=180);以及任何>=366,我应该得到id=5;

4 个答案:

答案 0 :(得分:1)

怎么样

SELECT  *
FROM    @Table 
WHERE   (@Value BETWEEN [MIN] AND [MAX])
OR      (@Value >= [MIN] AND [MAX] = 0)

其中@Value是您要查找的值。

但请注意,如果[MIN],[MAX]范围不是唯一的,则可能会返回超过1行。

答案 1 :(得分:1)

试试这个:

declare @Search_val int=95;


SELECT  Id
FROM   your_table
WHERE   @Search_val between [min]     and [max]
OR      (@Search_val>min and [max]=0 and [min]!=0)

答案 2 :(得分:1)

SELECT  [Id]
FROM    @Table 
WHERE   (@Value BETWEEN [min] AND [max])
OR      (@Value >= [min] AND [max] = -1)

是否可以将无限数的最大值(ID 5的最大值)设为-1?

如果是这样,上面的代码将会很好用。

你需要一种独特的方式来说明必须包含任何高于min的数字,并且在id 1和5都使用0并不是唯一的

编辑 - >如果你不能改为-1

,这应该有效
SELECT TOP 1 [Id]
FROM    @Table 
WHERE   (@Value BETWEEN [min] AND [max])
OR      (@Value >= [min] AND [max] = 0)
ORDER BY [MIN] DESC

答案 3 :(得分:1)

你可以试试这个

DECLARE @Value INT = 400

SELECT * FROM TABLE 
WHERE (@Value >= 366 AND Min = 366 ) 
OR @Value BETWEEN Min AND MAX