判断请假时间区间内有没有重复的数据

这里要区分时刻 和 时间区间,时刻是某一固定的时间如2018-11-07 10:22:00 。而时间区间是两个时刻中间的时间如2018-11-07 10:22:00 - 2018-11-07 11:22:00 

我需要判断请假的时间区间 有没有重复的请假时间

//判断时间区间有没有数据

//签到签退时间   接口传递过来的数据
string fdtmInDate = json.Master[0].Data.Rows[0]["fdtmInDate"].ToString();
string fdtmOffDate = json.Master[0].Data.Rows[0]["fdtmOffDate"].ToString();

//员工编码
string fchrEmployee = json.Master[0].Data.Rows[0]["fchrEmployee"].ToString();

//前两天和后两天  这个是减少数据,是判断前后两天的数据
string dthou= dt.AddDays(2).ToString();
string dtqian = dt.AddDays(-2).ToString();

//fbitDelete  是假删除的字段  为一的是删除字段
strSQL = @" select * from dbo.HRAttendanceDetail whit(nolock)  where fchrEmployee='" + fchrEmployee + "' AND (fdtmInDate >= '" + dtqian + "' AND fdtmInDate <= '" + dthou + "') AND(fbitDelete is null OR fbitDelete = 0)

AND

      (

              (

                    (fdtmInDate >= '"+fdtmInDate+"' AND fdtmInDate < '"+fdtmOffDate+"') OR(fdtmOffDate > '"+fdtm InDate+"' AND fdtmOffDate <= '"+fdtmOffDate+"')

                ) OR(

                   (fdtmInDate <= '"+fdtmInDate+"' AND fdtmOffDate > '"+fdtmInDate+"') OR(fdtmInDate < '"+fdtmOffDate+"' AND fdtmOffDate >= '"+fdtmOffDate+"')

                )

   ) ";
              DataTable dd = DBHelper.GetTable(strConn, strSQL);
              if (dd.Rows.Count>0) { throw new Exception("该时间区间内有签到/签退时间,无法新增!"); }

我这是基于C#的代码,最关键的思想就是四个时刻(签到时刻,签退时刻,数据库签到时刻,数据库签退时刻) 作为比较 例如:签到时刻 和 数据库某条数据比较;判断 这个签到时刻是不是在数据库某条数据的签到和签退时间区间之内 ,

要是在就说明这个时间区间和数据库的时间区间有交集,其他三个时刻也是这个比较,接口传的数据和数据库的比较,数据库和接口的比较。只要有一个成立就说明有交集。都不成立则说明没有交集。

猜你喜欢

转载自www.cnblogs.com/Children-qiuzhen/p/9921269.html