0

假设我有以下数据库表

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

4 回答 4

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
于 2012-09-12T05:49:33.797 回答
1

你可以试试这个

DECLARE @Value INT = 400

SELECT * FROM TABLE 
WHERE (@Value >= 366 AND Min = 366 ) 
OR @Value BETWEEN Min AND MAX
于 2012-09-12T05:49:54.987 回答
1

怎么样

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

@Value 是您要查找的值。

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

于 2012-09-12T05:43:54.873 回答
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)
于 2012-09-12T05:44:15.337 回答