最近遇到一个新问题,同事做了个在线答题系统,单选题可以直接通过对比“答题结果”和“标准答案”来判断答案的正误,但是这种方法不适用于多选题,网上多选题的结果的判定方法很多种,但是直接用在数据库有一定的局限性,所以自己自定义了一个数据库函数来解决。
数据库:SQL Server
函数输入:DaTiJG(答题结果)BiaoZhunDA(标准答案)
函数输出:1、完全一致;2
2、部分一致,答案全对但是不全;1
3、有错误选项;0
函数详情:
Create function [dbo].[Judge](@DaTiJG nvarchar(300),@BiaoZhunDA nvarchar(300))
returns int --返回值类型
as
begin
declare @Result int --最终结果
if(@DaTiJG = @BiaoZhunDA)--完全一致
begin
set @Result = 2
end
else
begin
declare @Number int --循序用
declare @Temp varchar(3) ---储存单个答案
set @Number = 1;
while @Number < len(@BiaoZhunDA)
begin
set @Temp = SUBSTRING(@BiaoZhunDA,@Number,3)--取单个答案
set @DaTiJG = replace(@DaTiJG,@Temp,'')--将答题结果中的正确答案替换为空
set @Number = @Number + 4 --步长+4,如:002&
end
set @DaTiJG = replace(@DaTiJG,'&','')--替换答题结果中的&
if(@DaTiJG = '')--如果最终答题结果为空,则证明所有选项都在正确答案中,返回1
begin
set @Result = 1
end
else--否则说明选择了错误答案,返回0
begin
set @Result = 0
end
end
return @Result
end