1. 程式人生 > >判斷請假時間區間內有沒有重複的資料

判斷請假時間區間內有沒有重複的資料

這裡要區分時刻 和 時間區間,時刻是某一固定的時間如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#的程式碼,最關鍵的思想就是四個時刻(簽到時刻,簽退時刻,資料庫簽到時刻,資料庫簽退時刻) 作為比較 例如:簽到時刻 和 資料庫某條資料比較;判斷 這個簽到時刻是不是在資料庫某條資料的簽到和簽退時間區間之內 ,

要是在就說明這個時間區間和資料庫的時間區間有交集,其他三個時刻也是這個比較,介面傳的資料和資料庫的比較,資料庫和介面的比較。只要有一個成立就說明有交集。都不成立則說明沒有交集。