0

以下は、2 つの日付の間に営業日を設定するためのストアド プロシージャです。

Create procedure [dbo].[sp_workingdays](@startdate date,@enddate date,@createddatetime datetime,@adminid int)
as
declare @start date,@end date
declare @day varchar(50)
declare @timeid int
declare @daypare int
declare @workingdaytype varchar(20)
begin
set @start=@startdate
set @end=@enddate
while (@start<=@end)
begin
if @start not in (select  Date from Generalholyday_details)
begin
select @day= DATENAME(dw,@start)
select @workingdaytype =case (DATEPART(DW,@start)+@@DATEFIRST)%7 when 1 then 'Leave Day' when 2 then 'Full Day' when 3 then 'Full Day' when 4 then 'Full Day'when 5 then 'Full Day' when 6 then 'Full Day' when 0 then 'Half Day' end

select @timeid=Time_id from Workingdaytimesetting_details where Workingday_type=@workingdaytype
insert into Workingday_details(Working_date,working_day,Time_id) values(@start,@day,@timeid)
update Workingday_details set createddatetime=@createddatetime where createddatetime is null
update Workingday_details set adminid=@adminid where adminid is null
end
set @start=DATEADD(day,1,@start)
end
end
GO

datepart の 1 行目は日曜日です。しかし、実際にストアド プロシージャを実行すると、土曜日は 1 になりました。日曜日に 1 を設定するにはどうすればよいですか。以前のシステムでは、同じ手順で日曜日に 1 を取得しました。

4

2 に答える 2

0

SET DATEFIRST (Transact-SQL) をご覧ください。

週の最初の曜日を 1 ~ 7 の数字に設定します。

SET DATEFIRST の現在の設定を確認するには、@@DATEFIRST 関数を使用します。

SET DATEFIRST の設定は、解析時ではなく、実行時または実行時に設定されます。

SET DATEFIRST を指定しても、DATEDIFF には影響しません。DATEDIFF は、関数が決定論的であることを保証するために、常に日曜日を週の最初の曜日として使用します。

于 2013-07-26T05:57:14.253 に答える