-3
它为什么会返回负值?我传递的每一个价值都是积极的?但它确实返回负值?我尝试了每一个价值,每一个积极的但不返回正面的? 请帮助我,我想每一个东西为什么我的查询返回负值?
ALTER FUNCTION [dbo].[GetShiftTotalDurationForDays]
(
@DepartmentShiftHistory_ID int,
@FromDate DateTime,
@ToDate DateTime,
@UserID int
)
RETURNS int
AS
BEGIN
Declare @TotalShiftHolidays int
Declare @TotalGazetted int
Declare @TotalLeaves int
Declare @SumOfHolidays int
Declare @TotalDays int
--Declare @TrimmedAttendanceDate varchar(7)
Declare @TrimmedFromDate varchar(7)
Declare @TrimmedToDate varchar(7)
Declare @ShifTimeDifference int
Declare @ShiftStartTime time
Declare @ShiftEndTime time
Declare @ShiftTimeForTotalDays int
Declare @ShiftID int
set @ShiftID= (select Shift_ID From DeparmentShiftsHistory Where [email protected]_ID)
-- Set @TrimmedAttendanceDate = (Select CONVERT(Varchar(7), Attendance.AttendanceDate, 113) from Attendance)
Set @TrimmedFromDate = (Select CONVERT(Varchar(7), @FromDate , 113))
Set @TrimmedToDate = (Select CONVERT(Varchar(7), @ToDate, 113))
Set @TotalShiftHolidays= (Select Count(*) from dbo.Attendance
where IsShiftHoliday=1 AND AttendanceDate >= @FromDate
AND AttendanceDate < dateadd(day,1,@ToDate))
--AND User_ID= @UserID)
Set @TotalGazetted = (Select Count(*) from dbo.Attendance
where IsGazettedHoliday=1
AND datepart(year,@FromDate) = datepart(year,AttendanceDate))
-- @TrimmedAttendanceDate >= @TrimmedFromDate
--AND @TrimmedAttendanceDate <= @TrimmedToDate
-- AND User_ID= @UserID)
Set @TotalLeaves= (Select Count(*) from dbo.Attendance
where IsLeaveHoliday=1 AND AttendanceDate >= @FromDate
AND AttendanceDate <dateadd(day,1,@ToDate) AND User_ID= @UserID)
Set @SumOfHolidays = (@TotalShiftHolidays + @TotalGazetted + @TotalLeaves)
Set @TotalDays = (Select DATEDIFF(dd, @FromDate, @ToDate)) - @SumOfHolidays --Exlcuding holidays
Set @ShiftStartTime = (Select Cast(DeparmentShiftsHistory.StartTime as time) as StartTime from DeparmentShiftsHistory
where [email protected]_ID)
--DeparmentShiftsHistory.Shift_ID= @ShiftID)
Set @ShiftEndTime = (Select Cast(DeparmentShiftsHistory.EndTime as time) as EndTime from DeparmentShiftsHistory
where [email protected]_ID)
-- DeparmentShiftsHistory.Shift_ID= @ShiftID)
Set @ShifTimeDifference = (Select DATEDIFF(minute,@ShiftEndTime,@ShiftStartTime)) --Returns time difference in Minutes
Set @ShiftTimeForTotalDays = @ShifTimeDifference * @TotalDays
RETURN @ShiftTimeForTotalDays -- //Total Shift Timmings BetWeennn Dates in Minutes
END
尝试打印的每个值,看哪个变量被生成-ve值 – 2014-10-20 15:45:39
'声明@a日期时间= '20140101' 申报@b日期时间= '20120101' 选择DATEDIFF(分,@一个,@ b)中, DATEDIFF(MINUTE,@ b,@ a)' – bummi 2014-10-20 15:46:05
检查DATEDIFF输入参数的顺序,看起来是错误的。如果你希望他们不管他们周围的方式,在'DATEDIFF()'周围放一个ABS() – 2014-10-20 15:47:24