SELECT中的Cap字段值

时间:2012-11-14 23:41:05

标签: sql sql-server tsql

我试图限制特定字段,以便它们不会超过特定值。

例如,类似这样的东西就足够了,我可以指定一个字段不应超过8:

SELECT (
        cap(t.MondayHrs,8) 
        + cap(t.TuesdayHrs,8)
        + cap(t.WednesdayHrs,8)
        + cap(t.ThursdayHrs,8)
        + cap(t.FridayHrs,8)
       ) as TotalHours

如果MondayHrs = 7,则应将其添加到TotalHours为7。 如果MondayHrs = 10,则应将其添加到TotalHours为8(我的上限值)

T-SQL中是否有任何内容可以促进这一点?

4 个答案:

答案 0 :(得分:6)

create function Cap (@Value float,@maxValue float) Returns float 
as
begin
Declare @Result float
if @Value > @maxValue select @Result=@Maxvalue else select @Result=@Value
Return @Result
end;

使用

Select dbo.Cap(1,10),dbo.Cap(11,10)

答案 1 :(得分:2)

另一个想法是使用CASE。例如:

SELECT ( 
       (CASE WHEN t.MondayHrs > 8 THEN 8 ELSE t.MondayHrs END)
       + (CASE WHEN t.TuesdayHrs > 8 THEN 8 ELSE t.TuesdayHrs END)
) as TotalHours

答案 2 :(得分:2)

...试

select least(t.MondayHrs,8) 
    + least(t.TuesdayHrs,8)
    + least(t.WednesdayHrs,8)
    + least(t.ThursdayHrs,8)
    + least(t.FridayHrs,8)
   ) as TotalHours

答案 3 :(得分:1)

您可以为MySQL GREATEST编写一个函数。

然后你可以做类似

的事情
select greatest(some_col, 8) +
       greatest(other_col, 8) + 
       ...
from your_table