2009-05-06 9 views
3

Diese Abfrage gibt mir Syntaxfehler in Wenn-zwischen-Zeile. Wie kann ich sie lösen?Wie kann ich 'when - between' Anweisung in sql verwenden?

alter FUNCTION [dbo].[fn_GetActivityLogsArranger] 
(
@time AS nvarchar(max) 
) 

RETURNS nvarchar(max) 
AS 
BEGIN 
declare @Return varchar(30) 

select @Return = case @time 
when between '15:00' and '15:30' then '15:00-15:30' 
when between '15:30' and '16:00' then '15:30-16:00' 
when between '16:00' and '16:30' then '16:00-16:30' 
when between '16:00' and '16:30' then '16:00-16:30' 
when between '16:30' and '17:00' then '16:30-17:00' 
when between '17:00' and '17:30' then '17:00-17:30' 
when between '17:30' and '18:00' then '17:30-18:00' 
else 'Unknown' 
Return @Return 
end

Antwort

4
alter FUNCTION [dbo].[fn_GetActivityLogsArranger] 
(
    @time AS varchar(30) 
) 
RETURNS 
varchar(30)AS 
BEGIN 
declare @Return varchar(30) 
select @Return = case 
when @time between '15:00' and '15:30' then '15:00-15:30' 
when @time between '15:30' and '16:00' then '15:30-16:00' 
when @time between '16:00' and '16:30' then '16:00-16:30' 
when @time between '16:00' and '16:30' then '16:00-16:30' 
when @time between '16:30' and '17:00' then '16:30-17:00' 
when @time between '17:00' and '17:30' then '17:00-17:30' 
when @time between '17:30' and '18:00' then '17:30-18:00' 
else 'Unknown' 
end 
Return @Return 
end 
+0

würde Downvoter Geist einen Kommentar hinterlassen Sie bitte. Danke –

+0

Vielen Dank. Du hast Recht. Schauen Sie bitte eine andere Frage.http: //stackoverflow.com/questions/829089/how-to-call-user-defined-function-in-order-in-use-with-select-group-by-order-by – Penguen

4

Sie können dieses Format der Fallsyntax nicht verwenden. Sie haben einen Fall zu tun, die die Kontrollen tun:

select @Return = case 
when @time between '15:00' and '15:30' then '15:00-15:30' 
when @time between '15:30' and '16:00' then '15:30-16:00' 
when @time between '16:00' and '16:30' then '16:00-16:30' 
when @time between '16:00' and '16:30' then '16:00-16:30' 
when @time between '16:30' and '17:00' then '16:30-17:00' 
when @time between '17:00' and '17:30' then '17:00-17:30' 
when @time between '17:30' and '18:00' then '17:30-18:00' 
else 'Unknown' END 

Return @Return 

Auch Sie END am Ende Ihres Falles Aussage fehlten (siehe END in Groß oben).

0

Gut für den Anfang benötigen Sie eine @variable in jeder wenn Anweisung

select @Return = case 
when @time between ('15:00' and '15:30') then '15:00-15:30' 
when @time between ('15:30' and '16:00') then '15:30-16:00' 
when @time between ('16:00' and '16:30') then '16:00-16:30' 
when @time between ('16:00' and '16:30') then '16:00-16:30' 
when @time between ('16:30' and '17:00') then '16:30-17:00' 
when @time between ('17:00' and '17:30') then '17:00-17:30' 
when @time between ('17:30' and '18:00') then '17:30-18:00' 
else 'Unknown' 
0

Sie in jedem die Variable haben müssen, um zu übergeben, wenn Klausel zB.

case 
    when @time between '15:00' and '15:30' then '15:00-15:30' 
    when @time between '15:30' and '16:00' then '15:30-16:00' 
1

Fall Syntax: CASE WENN DANN Boolean_expression result_expression [... n] [ELSE else_result_expression] END

0

Sie diese Funktion nicht verwenden sollte, sollten Sie eine Tabelle oder eine Tabelle haben Wertfunktion der Zeit Eimer, so dass Sie eine reine Join dagegen tun können. Ein Beispiel finden Sie in my other post. Der Join wird bei weitem den Ansatz übertreffen, Ihre Funktion in einem Zeilensatz aufzurufen.

Verwandte Themen