Sql 为什么我的查询返回负值?
为什么它返回负值?我正在传递每一个正值?但它会返回负值吗?我尝试了每一个值,每一个都是正数,但没有返回正数? 请帮帮我,我什么都试过了Sql 为什么我的查询返回负值?,sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,为什么它返回负值?我正在传递每一个正值?但它会返回负值吗?我尝试了每一个值,每一个都是正数,但没有返回正数? 请帮帮我,我什么都试过了 ALTER FUNCTION [dbo].[GetShiftTotalDurationForDays] ( @DepartmentShiftHistory_ID int, @FromDate DateTime, @ToDate DateTime, @UserID int ) RETURNS int AS BEGIN
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 DepartmentShiftHistoryID=@DepartmentShiftHistory_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 DepartmentShiftHistoryID=@DepartmentShiftHistory_ID)
--DeparmentShiftsHistory.Shift_ID= @ShiftID )
Set @ShiftEndTime = (Select Cast(DeparmentShiftsHistory.EndTime as time) as EndTime from DeparmentShiftsHistory
where DepartmentShiftHistoryID=@DepartmentShiftHistory_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
DATEDIFF将根据参数的顺序返回差分posive或负值:
Declare @a datetime='20140101'
Declare @b datetime='20120101'
Select DATEDIFF(MINUTE,@a,@b),DATEDIFF(MINUTE,@b,@a)
要获得正值,第一个参数必须是次参数。尝试打印每个值,看看哪个变量正在生成-ve valueDeclare@a datetime='20140101'Declare@b datetime='20120101'选择DATEDIFFMINUTE,@a,@b,DATEDIFFMINUTE,@b,@a检查DATEDIFF输入参数的顺序,它们似乎是错误的。如果你想让他们不管走哪条路,在DATEDIFF周围放一个腹肌