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'附近的语法不正确。
请帮忙。
答案 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)
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