【发布时间】:2015-04-25 19:54:36
【问题描述】:
declare @StartDate varchar(30), @myStartDate date, @iterate int, @DaysDiff int, @NoOfDays varchar (200) , @username varchar(30), @StaffID int
select @DaysDiff = 6, @iterate =0, @StartDate = '2015-04-29', @username = 'itdsnm'
select @StaffID = StaffID from Staff where LoginName = @username
select @myStartDate = cast(@StartDate as DATE)
begin
Create Table #Temp8(Dates date,MyDay int)
While @iterate < @DaysDiff +1
Begin
Insert Into #Temp8(Dates,MyDay)
Select @myStartDate,DATEPART(dw,@myStartDate)
Select @myStartDate = dateadd(dd,1,@myStartDate)
IF (Select COUNT(*) from #Temp8 where Dates In(Select StartDate From Holidays Where Username = @StaffID )) >0
Begin
Select @NoOfDays = 'One of your days fall between a holiday already taken, please review'
Return
End
Else
Select @iterate = @iterate + 1
End
;With Temp2(Dates,MyDay)
As
(Select Dates,MyDay from #Temp8 Where MyDay not in (1,7))
Select @NoOfDays = COUNT(*) from Temp2 Where Dates Not In (Select Date From BankHolidays)
end
在上述过程中一切正常,但是当涉及到 With 语句时,它会抛出一个错误“从字符串转换日期和/或时间时转换失败。”有人可以帮我弄这个吗。提前致谢
【问题讨论】:
-
哪个 dbms? (这是产品特定的功能......)
-
请展示数据类型为
BankHolidays的数据和架构示例 -
银行假期是在 SQL 中手动创建的带有假期日期的表,例如:2015-05-25,2015-08-31,2015-12-25 ....
标签: sql-server tsql stored-procedures