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)OK、構文エラーはあるべきだと確信しています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 に答える