如何在CASE语句中使用“ BETWEEN”

时间:2018-09-11 01:03:09

标签: sql case between

我创建了一个标量函数,该函数应该将学生的分数转换为字母,我使用了CASE&Between来切换值,如下所示:

Class<MyCustomChildClass>

该函数在96.5(而不是97)和92.5(而不是93)上从一种情况跳到另一种情况,是什么意思?

[Sample]

请帮助

3 个答案:

答案 0 :(得分:0)

默认的小数位数为0,因此四舍五入是在函数调用中进行的。

此外,您不需要between,因为case条件是有序的。因此,我建议尝试:

ALTER FUNCTION [GetLetterGrade] (
    @avg decimal(10, 2) ,
    @isCommented bit
) RETURNS Char(50)
AS BEGIN
    return (case when @isCommented = 0     
                 then (case when @avg >= 97 then '01'
                            when @avg >= 93 then '02'
                            when @avg >= 90 then '03'
                            when @avg >= 87 then '04'
                            when @avg >= 83 then '05'
             ......
END;

答案 1 :(得分:0)

您可以尝试以下

len

答案 2 :(得分:0)

根据docs,仅当所有三个参数均为相同类型时,表达式expr BETWEEN min AND max才等效于(expr <= max AND expr >= min)。否则,类型转换将应用于所有参数。正是在此转换过程中才会发生舍入错误。

对于您的情况,我建议使用FLOOR向下舍入。

when FLOOR(@avg) between 97 And 100 THEN '01'