iT邦幫忙

0

重複日期條件檢核

  • 分享至 

  • xImage

各位好
最近在寫一支有關日期設定的程式
想要達到的目的如下
https://ithelp.ithome.com.tw/upload/images/20220408/20137810UQdGzIz0HM.png
當我輸入一筆新的門市及排外起訖日時
會去資料庫撈資料比對之前的門市資料日期
可以判斷他的起迄日是否有重疊過,如果沒有重疊,就可以新增新的一筆資料
如果有重疊,就跳出提示並不予新增
想問一下這邊的SQL 該怎麼去下判定,或是使用AJAX判斷?
求有經驗的大神指點

尼克 iT邦大師 1 級 ‧ 2022-04-08 10:40:56 檢舉
https://ithelp.ithome.com.tw/articles/10229472
資料庫正規化(一~三)
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
天黑
iT邦研究生 5 級 ‧ 2022-04-08 10:55:38

基本上應該要開API透過AJAX呼叫到後端使用SQL語法處理使用比較好喔,輸入的起訖日期,門市代號(Key)帶入搜尋,SQL目前提供一個做法給你,使用between帶入輸入的起日跟迄日分別判斷資料表的起日跟迄日,應該是比較容易實現的方法,應該有更好的作法,先提供你比較簡易的作法

0
mantissa23bit
iT邦新手 4 級 ‧ 2022-04-08 11:32:11

供參考判斷排外日期有無重疊

SELECT COUNT(門市代號)
FROM 資料表
WHERE 門市代號="輸入的門市代號" AND NOT (排外起日 > "輸入的排外止日" OR 排外止日 <"輸入的排外起日")

COUNT(門市代號) > 0 代表有重疊

0
小山丘
iT邦新手 2 級 ‧ 2022-04-08 11:37:16
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

比較簡單的做法拉

0
ronrun
iT邦新手 4 級 ‧ 2022-04-09 12:50:31

想問一下這邊的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)

我覺得這樣的寫法比較好理解。

我要發表回答

立即登入回答