我们可以在 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
我知道我们可以在 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