Как я могу использовать выражение «когда - между» в SQL? - PullRequest
4 голосов
/ 06 мая 2009

Этот запрос дает мне синтаксическую ошибку в строке между ними. как я могу их решить?

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

Ответы [ 6 ]

4 голосов
/ 06 мая 2009
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
4 голосов
/ 06 мая 2009

Вы не можете использовать этот формат синтаксиса регистра. Вам нужно будет сделать дело, которое проверяет:

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 в конце вашего оператора case (смотрите END в верхнем регистре выше).

1 голос
/ 06 мая 2009

регистр синтаксиса: ДЕЛО WHEN Boolean_expression THEN result_expression [... n] [ELSE else_result_expression] END

0 голосов
/ 06 мая 2009

Вы не должны использовать эту функцию, у вас должна быть табличная или табличная функция временных интервалов, чтобы вы могли выполнить чистое соединение с ней. См. мой другой пост для примера. Объединение намного превзойдет подход вызова вашей функции для набора строк.

0 голосов
/ 06 мая 2009

Вы должны иметь переменную в каждом предложении 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'
0 голосов
/ 06 мая 2009

Ну, для начала вам нужно передать @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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...