0
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

错误被抛出:

消息 156,级别 15,状态 1,第 13 行
关键字“Else”附近的语法不正确。
消息 102,级别 15,状态 1,第 32 行
“@timeid”附近的语法不正确。

请帮忙。

4

2 回答 2

3

好的,我很确定您的语法错误varchar(11)应该是varchar.

尽管如此,这对 SQL 的使用并不好;首先,您使用getdate()3 次 - 每次都会不同(以毫秒为单位),这可能意味着在第一次和最后一次通话之间从周五到周六,或者从 08:30 之前到 08:30 之后。

尝试这个:

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
于 2013-01-07T03:14:11.200 回答
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
于 2013-01-07T03:26:15.090 回答