基本上應該要開API透過AJAX呼叫到後端使用SQL語法處理使用比較好喔,輸入的起訖日期,門市代號(Key)帶入搜尋,SQL目前提供一個做法給你,使用between帶入輸入的起日跟迄日分別判斷資料表的起日跟迄日,應該是比較容易實現的方法,應該有更好的作法,先提供你比較簡易的作法
供參考判斷排外日期有無重疊
SELECT COUNT(門市代號)
FROM 資料表
WHERE 門市代號="輸入的門市代號" AND NOT (排外起日 > "輸入的排外止日" OR 排外止日 <"輸入的排外起日")
COUNT(門市代號) > 0 代表有重疊
IF EXISTS(SELECT 門市代號
FROM 資料表
WHERE 排外起日<=@新增排外起日
AND @新增排外起日<=排外訖日
AND 門市代號=@新增門市代號)
BEGIN
SET @ErrorMessage='資料重複不予新增'
SELECT @ErrorMessage 'ErrorMessage'
END
ELSE IF EXISTS(SELECT 門市代號
FROM 資料表
WHERE 排外起日<=@新增排外訖日
AND @新增排外訖日<=排外訖日
AND 門市代號=@新增門市代號)
BEGIN
SET @ErrorMessage='資料重複不予新增'
SELECT @ErrorMessage 'ErrorMessage'
END
ELSE
BEGIN
更新資料
END
比較簡單的做法拉
想問一下這邊的SQL 該怎麼去下判定,或是使用AJAX判斷?
針對你的主題,這兩個都要做啊。首先在頁面上用 ajax 去後端做處理,然後 sql 再判斷有無重複。
兩個按鈕都要綁定事件,大概是用 onkeyup 或是 onmouseup ,然後先用 js 判斷是否屬於合法日期格式。若是,則帶入後端。
SQL的檢查,假設先前的記錄是 5月1日到5月31日,若有重複,一定是新的起始日或是結束日若在這區間。
既有記錄 5月1日 - 5月31日
新記錄的前面重複 5月10日 - 6月5日
新記錄的後面重複 4月10日 - 5月10日
新記錄的整段重複 5月5日 - 5月20日
WHERE 門市代號=門市代號
AND (newStartDate Between startDate AND endDate
OR newEndDate Between startDate AND endDate)
我覺得這樣的寫法比較好理解。