2

可能重复:
在 sql 中获取两个值中的最小值

我正在尝试获取范围之间的所有值。我正在做这样的事情

DECLARE @StartSeq INT
set @StartSeq = (select Sequence from MyTbl where ...)

update ... and MyCol between @StartSeq and @StartSeq+@RelativePosition

但是如果RelativePosition 是负数,它会失败,因为它的数量比startseq 小。我能想到的最简单的解决方案是复制我的代码并执行 if (RelPos<0) 以查看我是先执行 @StartSeq+@RelativePosition 还是第二个。然而,这似乎不是最好的解决方案。有没有办法我可以在 sql 中做到这一点?我尝试了 min(a,b) 但它在 sql 中不起作用。

4

2 回答 2

4

这样的事情会做:

update ... and ((MyCol between @StartSeq and @StartSeq+@RelativePosition)
             or (MyCol between @StartSeq+@RelativePosition and @StartSeq))

交替:

declare @MinSeq int
declare @MaxSeq int

select @MinSeq = min(Seq), @MaxSeq = max(Seq)
from (values (@StartSeq), (@StartSeq+@RelativePosition)) this (Seq)

update ... and MyCol between @MinSeq and @MaxSeq
于 2013-01-07T14:53:00.730 回答
0

您可以在中间使用CASE语句,例如

and MyCol Between CASE When @StartSeq <= @relativePosition Then @Start Else @RelativePosition End
               And CASE When @StartSeq <= @relativePosition Then @RelativePosition Else @Start End

但是,这很讨厌,您应该真正尝试确保参数有意义。

于 2013-01-07T14:52:00.087 回答