我需要创建一个临时表,该表将基于输入参数 sdate 和 edate 具有 Start_Date 和 End_Date 列。此表是办公室的非工作时间列表,包括工作日下午 6 点至早上 6 点。周末我需要时间如下:
- 周五下午 6 点至周六凌晨 12 点
- 周六上午 12 点至周日上午 12 点和
- 周日上午 12 点至周一上午 6 点
希望下表能让您了解我想要实现的目标:
开始 | 开始日期 | 结尾 | 结束日期 |
---|---|---|---|
太阳 | 08/01/2021 00:00:00.000 | 星期一 | 2021 年 8 月 2 日 06:00:00.000 |
星期一 | 2021 年 8 月 2 日 18:00:00.000 | 周二 | 2021 年 8 月 3 日 06:00:00.000 |
周二 | 2021 年 8 月 3 日 18:00:00.000 | 星期三 | 2021 年 8 月 4 日 06:00:00.000 |
星期三 | 2021 年 8 月 4 日 18:00:00.000 | 周四 | 2021 年 8 月 5 日 06:00:00.000 |
周四 | 2021 年 8 月 5 日 18:00:00.000 | 周五 | 2021 年 8 月 6 日 06:00:00.000 |
周五 | 2021 年 8 月 6 日 18:00:00.000 | 星期六 | 08/07/2021 00:00:00.000 |
星期六 | 08/07/2021 00:00:00.000 | 太阳 | 2021 年 8 月 8 日 00:00:00.000 |
太阳 | 2021 年 8 月 8 日 00:00:00.000 | 星期一 | 2021 年 8 月 9 日 06:00:00.000 |
星期一 | 2021 年 8 月 9 日 18:00:00.000 | 周二 | 2021 年 8 月 10 日 06:00:00.000 |
周二 | 2021 年 8 月 10 日 18:00:00.000 | 星期三 | 2021 年 8 月 11 日 06:00:00.000 |
我已经尝试了以下代码,但它没有得到正确的时间范围。
ALTER PROCEDURE [dbo].[temptableforoffhours]
@BDate varchar(50),
@EDate varchar(50),
@Provider varchar(1000)=''
AS
BEGIN
SET NOCOUNT ON
DECLARE
@BeginDate datetime = '',
@EndDate DATETIME = ''
IF @BeginDate = '' AND @EndDate = ''
BEGIN
SET @BeginDate = DATEADD(YY,-3,GETDATE())
SET @EndDate = GETDATE()
END
IF @BeginDate <> '' AND @EndDate <> ''
BEGIN
Set @BeginDate =CONVERT(datetime, @BDate, 121)
SET @EndDate =Convert (Datetime, cast(CONVERT(DateTime, DATEADD(DD,1,@EDate), 121) as Date),121)
END
/********************************Creation of #tmptimeFrameAudit table with FrameID and Start_day and end_Day********************************/
Declare @CountTimeFrames int = DateDiff(Day, @BeginDate, @EndDate)
DECLARE @Counter INT
SET @Counter = 1
Create Table #tmptimeFrameAudit (Frameid int,Start_Day datetime, End_Day datetime, doW varchar(10))
WHILE ( @Counter <= @CountTimeFrames)
BEGIN
IF @counter = 1
Begin
set @BeginDate = @BeginDate
End
Else
Begin
set @BeginDate = DATEADD(DD,1,@BeginDate)
End
IF (DatePart(weekday,@BeginDate) = 7)
BEGIN
Insert Into #tmptimeFrameAudit values (@Counter,@BeginDate,DATEADD(HOUR,24,@BeginDate), DATENAME(WEEKDAY,@BeginDate))
END
ELSE IF (DatePart(weekday,@BeginDate) = 6)
BEGIN
Insert Into #tmptimeFrameAudit values (@Counter,Dateadd(HOUR,18,CONVERT(datetime, @BeginDate, 121)),DATEADD(HOUR,6,@BeginDate), DATENAME(WEEKDAY,@BeginDate))
END
ELSE IF (DatePart(weekday,@BeginDate) = 1)
BEGIN
Insert Into #tmptimeFrameAudit values (@Counter,@BeginDate,DATEADD(HOUR,30,@BeginDate), DATENAME(WEEKDAY,@BeginDate))
END
ELSE
BEGIN
Insert Into #tmptimeFrameAudit values (@Counter,Dateadd(HOUR,18,CONVERT(datetime, @BeginDate, 121)),DATEADD(HOUR,12,@BeginDate), DATENAME(WEEKDAY,@BeginDate))
END
set @Counter = @Counter+1
END
Select * from #tmptimeFrameAudit
drop Table #tmptimeFrameAudit
END
你能告诉我代码有什么问题并帮助我纠正它吗?谢谢!