假设我有以下数据库表
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;
假设我有以下数据库表
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;
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
你可以试试这个
DECLARE @Value INT = 400
SELECT * FROM TABLE
WHERE (@Value >= 366 AND Min = 366 )
OR @Value BETWEEN Min AND MAX
怎么样
SELECT *
FROM @Table
WHERE (@Value BETWEEN [MIN] AND [MAX])
OR (@Value >= [MIN] AND [MAX] = 0)
@Value 是您要查找的值。
但是请注意,如果您的 [MIN],[MAX] 范围不是唯一的,则可能会返回超过 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)