2009-05-06 4 views
3

Cette requête me donne une erreur de syntaxe dans la ligne when-between. comment puis-je les résoudre?Comment puis-je utiliser l'instruction 'when-between' dans sql?

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

Répondre

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

serait l'esprit downvoter laissant un commentaire s'il vous plaît. Merci –

+0

Merci beaucoup. vous avez raison. Regardez s'il vous plaît un autre ques.http: //stackoverflow.com/questions/829089/how-to-call-user-defined-function-in-order-to-use-with-select-group-by-order-by – Penguen

4

Vous ne pouvez pas utiliser ce format de syntaxe. Vous devrez faire un cas qui ne vérifie:

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 

De plus, vous avez été un manque END à la fin de votre déclaration de cas (voir ci-dessus FIN en majuscules).

0

Eh bien pour commencer, vous devez passer votre @variable dans chaque instruction WHEN

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

Vous devez avoir la variable dans chaque clause WHEN par exemple.

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

syntaxe de cas: CAS QUAND expression_booléenne ALORS result_expression [... n] [ELSE else_result_expression] FIN

0

Vous ne devriez pas utiliser cette fonction, vous devez avoir une table ou fonction table de seaux de temps afin que vous puissiez faire une jointure pure contre elle. Voir my other post pour un exemple. La jointure surpassera de loin l'approche consistant à appeler votre fonction sur un ensemble de lignes.

Questions connexes