SQL 错误,从字符串转换日期 and/or 时间时转换失败
SQL error, Conversion failed when converting date and/or time from character string
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 语句时,它会抛出一个错误 "Conversion failed when converting date and/or time from character string." 谁能帮我解决这个问题。提前致谢
我同意 Tanner 的观点,即需要架构才能评估问题(即列数据类型)。
乍一看,虽然在我看来 [BankHolidays]
中的 [Date]
可能是某种字符串数据类型,并且该列包含某些无法转换为 [=12= 的字符串值]类型。
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 语句时,它会抛出一个错误 "Conversion failed when converting date and/or time from character string." 谁能帮我解决这个问题。提前致谢
我同意 Tanner 的观点,即需要架构才能评估问题(即列数据类型)。
乍一看,虽然在我看来 [BankHolidays]
中的 [Date]
可能是某种字符串数据类型,并且该列包含某些无法转换为 [=12= 的字符串值]类型。