假设我有以下数据库表
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;
答案 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