Обновление SQL WHile с условиями If - PullRequest
1 голос
/ 05 октября 2011

У меня есть следующий запрос:

Declare @cnt as int
Declare @int as int
Set @int = 0
Select @cnt =COUNT(Date) FROM tmp
While @int < @cnt 
Begin


    If (Select Datepart(MM,Start_Time) from dbo.tmp)>='00' and (Select Datepart(MM,Start_Time) from dbo.tmp)<'15'
        Set tmp.Start_Int = Datepart(HH,Start_Time)+'00'

    else If (Select Datepart(MM,Start_Time) from dbo.tmp)>='15' and (Select Datepart(MM,Start_Time) from dbo.tmp)<'30'
        Set tmp.Start_Int = Datepart(HH,Start_Time)+'15'

    else If (Select Datepart(MM,Start_Time) from dbo.tmp)>='30' and (Select Datepart(MM,Start_Time) from dbo.tmp)<'45'
        Set tmp.Start_Int = Datepart(HH,Start_Time)+'30'

    else If (Select Datepart(MM,Start_Time) from dbo.tmp)>='45' and (Select Datepart(MM,Start_Time) from dbo.tmp)<='59'
        Set tmp.Start_Int = Datepart(HH,Start_Time)+'45'
    end

Как вы можете видеть, я пытаюсь обновить Start_Int до подходящих интервалов в зависимости от того, где он падает.Используя это, я получаю сообщение об ошибке «Неверный синтаксис рядом с«. ».Я могу предположить, что этот запрос неверен, но я не могу найти примеры запроса while, в котором используется выбор для обновления поля, если выполняется условие.

1 Ответ

2 голосов
/ 05 октября 2011

Ошибки вызываются объявлениями tmp.Start_Int, которые, я думаю, вы пытаетесь вставить значения в таблицу базы данных с именем tmp.

Вам необходимо изменить:

Set tmp.Start_Int = Datepart(HH,Start_Time)+'00'

быть примерно таким:

update dbo.tmp set tmp.Start_Int = Datepart(HH,Start_Time)+'00' 

Также вы можете рассмотреть возможность использования курсора для чтения ваших данных.

РЕДАКТИРОВАНИЕ

Не могли бы вы использовать следующее в качестве основы?

declare @tmp table (Start_Time datetime)

insert into @tmp (Start_Time) values ('1-Oct-2011 21:02')
insert into @tmp (Start_Time) values ('1-Oct-2011 21:12')
insert into @tmp (Start_Time) values ('1-Oct-2011 21:22')
insert into @tmp (Start_Time) values ('1-Oct-2011 21:32')
insert into @tmp (Start_Time) values ('1-Oct-2011 21:42')
insert into @tmp (Start_Time) values ('1-Oct-2011 21:52')

select 
Start_Time, 
(case 
    when Datepart(MI,Start_Time) > 0 and datepart(MI, Start_Time) < 15 
        then cast(Datepart(HH,Start_Time) as varchar(5))+'00'
    when Datepart(MI,Start_Time) > 15 and datepart(MI, Start_Time) < 30 
            then cast(Datepart(HH,Start_Time) as varchar(5))+'15'
    when Datepart(MI,Start_Time) > 30 and datepart(MI, Start_Time) < 45 
            then cast(Datepart(HH,Start_Time) as varchar(5))+'30'
    when Datepart(MI,Start_Time) > 45  
            then cast(Datepart(HH,Start_Time) as varchar(5))+'45'
end) as Start_Int
from @tmp

Возвращает

Start_Time              Start_Int
----------------------- ---------
2011-10-01 21:02:00.000 2100
2011-10-01 21:12:00.000 2100
2011-10-01 21:22:00.000 2115
2011-10-01 21:32:00.000 2130
2011-10-01 21:42:00.000 2130
2011-10-01 21:52:00.000 2145
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...