如果语法错误,SQL嵌套if else

时间:2013-01-07 03:01:49

标签: sql sql-server tsql sql-server-2005

declare @timeid int

if(datename(Dw,getdate())='Monday')
begin
set @timeid=3
end
Else if(datename(Dw,getdate())='Sunday' or datename(Dw,getdate())='Saturday')
begin
  set @timeId=2
end

ELSE   -- for Tuesday to Friday

begin
 if(convert(varchar(11),getdate(),108)<='08:30:00')
  begin
   set @timeId=1
  end
 else
  begin
   set @timeId=0
  end
end

select @timeid

抛出错误:

  

Msg 156,Level 15,State 1,Line 13
  关键字'Else'附近的语法不正确。
  Msg 102,Level 15,State 1,Line 32
  '@ timeid'附近的语法不正确。

请帮忙。

2 个答案:

答案 0 :(得分:3)

好的,我非常确定您的语法错误varchar(11)应为varchar

尽管如此,这并不能很好地利用SQL;首先,你使用getdate() 3次 - 每次都会有所不同(毫秒),这可能意味着在第一次和最后一次通话之间,或从08:30之前到08:30之后,从周五到周六。 / p>

试试这个:

declare @timeid int
declare @nowtime datetime

select @nowtime=getdate()

select @timeid = CASE datename(Dw,@nowtime)
                   WHEN 'Monday' THEN 3
                   WHEN 'Sunday' THEN 2
                   WHEN 'Saturday' THEN 2
                   ELSE
                     CASE 
                       WHEN convert(varchar,getdate(),108)<='08:30:00' THEN 1
                       ELSE 0
                     END
                 END

答案 1 :(得分:2)

@DaleM打败了我,但是,是的,为了清晰起见,这是另一个重写:

DECLARE @DOW_SUNDAY int
DECLARE @DOW_MONDAY int
DECLARE @DOW_SATURDAY int

SET @DOW_SUNDAY = 1
SET @DOW_MONDAY = 2
SET @DOW_SATURDAY = 7

DECLARE @now datetime
DECLARE @day_of_week int

SET @now = GETDATE()
SET @day_of_week = DATEPART(DW, @now)

SELECT CASE WHEN @day_of_week = @DOW_MONDAY
            THEN 3
            WHEN @day_of_week IN (@DOW_SATURDAY, @DOW_SUNDAY)
            THEN 2
            WHEN CONVERT(varchar, @now, 108) <= '08:30:00'
            THEN 1
            ELSE 0
        END