2 Stimmen

Vergleichen Sie den Typ time in einer SQL-Funktion

Ich habe eine skalare Funktion erstellt, die den folgenden (Teil) Code enthält:

declare @start_time22 time(7);
select @start_time22=Courses.[Kursstartzeit] from Courses where [Kurs ID]=@val1 and [Kurstage]='Montag Mittwoch';

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

RETURN @Result

Die Funktion gibt immer den Wert "5" zurück, daher frage ich mich, ob ich zuerst den Typ time vergleichen kann... oder ist etwas falsch an meinem Code???

1voto

Gordon Linoff Punkte 1198148

Vermutlich möchten Sie die Abfrage folgendermaßen durchführen:

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

Wie die Kommentare im Grunde erklären, wird bei der Deklaration einer Variablen der Wert auf NULL gesetzt. Wenn Sie ihn auf einen anderen Wert setzen wollen, können Sie dies mit Syntax wie folgt tun:

declare @str varchar(255) = 'Meine Lieblingszeichenkette'

Da die Abfrage keine Ergebnisse liefert, wird der Variablen nie ein Wert zugewiesen. Sie bleibt als NULL-Wert.

Sie können die Arbeit auch in der Abfrage selbst erledigen, indem Sie case-Logik im select verwenden, anstatt eine Variable zu verwenden und dann if-Logik durchzuführen:

select @result = (case when

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X