сравнить время ввода в SQL-функции


Я создал скалярно-значную функцию, которая имеет следующее (Часть) кода в нем:

declare @start_time22 time(7);
select @start_time22=Courses.[Course start time] from Courses where [Course ID]=@val1 and [Course days]='monday wednesday';

if(@start_time22 is not null)
    begin
        IF (@start_time not between @start_time22 and @end_time22)
            BEGIN
                SET @Result = 1
            END
        ELSE
            BEGIN
                SET @Result = 0
            END
        IF (@end_time not between @start_time22 and @end_time22)
            BEGIN
                SET @Result = 1
            END
        ELSE
            BEGIN
                SET @Result = 0
            END
    end
else 
    begin
        set @Result = 5
    end


RETURN @Result

Функция всегда возвращает значение "5" , поэтому мне было интересно, могу ли я сравнить время ввода в первую очередь... или что-то не так с моим кодом???

1 2

1 ответ:

Предположительно вы хотите, чтобы запрос был:

select @start_time22=Courses.[Course start time]
from Courses
where [Course ID]=@val1 and [Course days] in ('monday', 'wednesday');

Как в основном объясняют комментарии, когда вы объявляете переменную, то значение устанавливается равным NULL. Если вы хотите установить его в другое значение, вы можете использовать синтаксис, такой как:

declare @str varchar(255) = 'My favorite string'

Поскольку запрос не возвращает результатов, переменной никогда не присваивается значение. Он остается нулевым значением.

Кроме того, вы можете выполнить работу в самом запросе, используя логику case в select, а не используя переменную и затем делая if логика:

select @result = (case when <whatever . . . )
from Courses
where [Course ID]=@val1 and [Course days] in ('monday', 'wednesday');