我们可以在BETWEEN中使用CASE吗?

时间:2016-09-17 06:36:01

标签: sql sql-server case between

我知道我们可以在CASE中使用BETWEEN。但我有一种情况,我想反过来做。我知道我们不能从case语句中返回多个值。但是如何实现以下情况?

select * from #Results
where Num Between 
case when @StartIndex>0 then 
((@StartIndex-1) * @PageCount))+ 1)) AND (@StartIndex * @PageCount)
else
((@StartIndex-1) * @PageCount)+ 1) AND  (((@StartIndex-1) * @PageCount)+ 1)

4 个答案:

答案 0 :(得分:1)

您可以执行以下操作

declare @start int,
        @end int

set @start = ((@StartIndex -1)*PageCount) + 1
set @end  = case when @StartIndex>0 then @StartIndex * @PageCount 
                 else ((@StartIndex -1)*@PageCount) +1 end

select * from #Results
where Num Between @start and @end

答案 1 :(得分:1)

WHERE CASE WHEN @StartIndex > 0 AND
           Num BETWEEN (((@StartIndex-1) * @PageCount) + 1) AND
                       (@StartIndex * @PageCount)
           THEN TRUE
           WHEN @StartIndex > 0 AND
           Num BETWEEN (((@StartIndex-1) * @PageCount) + 1) AND
                       (((@StartIndex-1) * @PageCount) + 1)
           THEN TRUE
           ELSE FALSE    -- other conditions?
      END

答案 2 :(得分:1)

您需要AND/OR逻辑

SELECT * 
FROM   #results 
WHERE  ( num BETWEEN ( ( @StartIndex - 1 ) * @PageCount ) + 1 AND @StartIndex * @PageCount 
         AND @StartIndex > 0 ) 
        OR ( num BETWEEN ( ( @StartIndex - 1 ) * @PageCount ) + 1 AND ( ( @StartIndex - 1 ) * @PageCount ) + 1 
             AND @StartIndex <= 0 ) 

答案 3 :(得分:1)

尝试这种方式,你只需要使用case作为第二个条件,因为你的第一个条件相同

SELECT * 
FROM #Results
WHERE Num BETWEEN (((@StartIndex-1) * @PageCount)+ 1) AND 
CASE WHEN @StartIndex > 0 THEN 
    (@StartIndex * @PageCount) 
ELSE 
    (((@StartIndex-1) * @PageCount)+ 1) 
END

在您的代码中,两个右括号是额外的或未正确操作&#39;(((@ StartIndex-1)* @PageCount))+ 1))&#39;以及你操作案件的方式也是不允许的。在不同条件下的方式:

SELECT * FROM #Results
WHERE Num BETWEEN 
    CASE WHEN @StartIndex>0 THEN 
        (((@StartIndex-1) * @PageCount)+ 1) 
    ELSE  
        (((@StartIndex-1) * @PageCount)+ 1) 
    END
    AND 
    CASE WHEN @StartIndex>0 THEN 
        (@StartIndex * @PageCount) 
    ELSE 
        (((@StartIndex-1) * @PageCount)+ 1) 
    END