2009-05-06 120 views
3

此查询给出了when-between行的语法错误。我如何解决它们?如何在sql中使用'when - between'语句?

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

回答

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

请downvoter介意留下评论。谢谢 – 2009-05-06 09:09:28

4

您不能使用该格式的大小写语法。你将不得不做这做检查的情况下:

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 

而且,你缺少你的case语句的结束的结束(见大写END以上)。

0

那么对于初学者,你需要通过你的@Variable在每个时声明

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

你需要有自己的变量在每个WHEN子句 如。

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

情况语法: CASE WHEN逻辑表达式THEN result_expression [... N] [ELSE else_result_expression] END

0

你不应该使用这个功能,你应该有一个表或表值函数的时间桶,所以你可以做一个纯粹的联合反对它。例如,请参阅my other post。连接将远胜于在行集上调用函数的方法。

相关问题