我们可以在 BETWEEN 中使用 CASE 吗

Can we use a CASE in BETWEEN

我知道我们可以在 CASE 中使用 BETWEEN。但我有一种情况,我想反过来做。我知道我们不能 return 来自 case statement.But 的多个值如何实现以下情况??

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)

您可以执行以下操作

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
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

你需要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 ) 

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

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

在您的代码中,两个右括号是多余的或未正确操作 '(((@StartIndex-1) * @PageCount))+ 1))' 并且您操作案例的方式也是不允许的。在不同条件下的方式:

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