我创建了一个标量函数,该函数应该将学生的分数转换为字母,我使用了CASE&Between来切换值,如下所示:
Class<MyCustomChildClass>
该函数在96.5(而不是97)和92.5(而不是93)上从一种情况跳到另一种情况,是什么意思?
[]
请帮助
答案 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'