2009-05-06 38 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。連接將遠勝於在行集上調用函數的方法。