сравнить время ввода в 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 ответ:
Предположительно вы хотите, чтобы запрос был:
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');