mysql 日期函式 應該會比較耐用
阿新 • • 發佈:2021-07-26
date_sub formate
mysql 日期函式
問題
實現一個預約掛號功能中有一個檢視訂單的模組,要對客戶的取消操作作出限制;
已預約未付款的,可以點選付款和取消,取消後作廢狀態;
已付款 未完成的,可以點選取消和完成,
取消的話則會觸發:一週只能取消兩次,一天只能取消一次;
限定只在工作日進行;
點選完成會調到評論頁面;
前臺:
前端觸發:
<c:if test="${!empty os }"> <c:forEach items="${os }" var="o"> <tr> //先拿一下基本屬性,略過 /* * 函式形式的寫法: <a href="javascript:upYyzt(${o.oid},25,1)">取消</a> * 4種情況觸發同一函式但是傳遞不同的type引數,寫的蠻幹淨利落的; * / <td> <c:if test="${o.yyztid==21 }"> <a href="javascript:upYyzt(${o.oid},25,1)">取消</a> <a href="javascript:upYyzt(${o.oid},22,2)">付款</a> </c:if> <c:if test="${o.yyztid==22 }"> <a href="javascript:upYyzt(${o.oid },23,3)">取消</a> <a href="javascript:upYyzt(${o.oid },24,4)">完成</a> </c:if> <c:if test="${o.yyztid==24 }"> <a href="toComm?oid=${o.oid }">評論</a> </c:if> </td> </tr> </c:forEach> </c:if>
<script type="text/javascript"> // 更新預約狀態函式 function upYyzt(oid,zt,type){ $.ajax({ url:"upYyzt", data:{"type":type,"oid":oid,"zt":zt}, type:"get", success:function(d){ if(d==1){ location.href="info.jsp"; } if(d==0 && type==3){ alert("取消預約失敗,當天只能取消1次,一週只能取消2次"); } if(d==0 && type==1){ alert("作廢失敗"); } if(d==0 && type==2){ alert("付款失敗"); } if(d==0 && type==4){ alert("操作失敗"); } } }); } </script>
實現 :先不管事務方面的問題,這裡主要記錄mysql日期函式
這裡的sql最終是這麼寫的:
yyztid為取消後的狀態:23:已取消; udid :使用者的唯一id ; oid 訂單序號;rdate 下單時間
1 週一到週五已經取消的總次數:
select COUNT(OID) from h_order where udid=26 AND yyztid=23 and rdate >( subdate(rdate, date_format(RDATE,'%w')-1)) and rdate >( subdate(rdate, date_format(RDATE,'%w')-5));
2 當日取消次數:
select count(oid) from h_order where udid=26 and yyztid=23 and DATE_FORMAT(rdate,"%Y-%m-%d") = CURDATE() ;
sql:udid yyztid限定表的行的範圍, 日期的> < 號可以直接表示在前在後,
subdate 用來表示間隔,date_formate 修正格式 -1 -5 表示定位到週一和週五,
DATE_FORMAT() 函式用於以不同的格式顯示日期/時間資料。
需要注意的是 %M和%m表示的格式是不相同的,比如09月(m )和9月(M);附表末;
可以用add函式去取代subdate ,相應的-1 和-5也要改變;兩者區別如下:
DATE_SUB() 函式從日期減去指定的時間間隔。
DATE_ADD() 函式向日期新增指定的時間間隔。
rdate 本身是y-m-d-h-m-s格式,但是並不影響和y-m-d直接比較;
mysql:
後臺程式碼:
在dao層中返回一個b到servelet ,servelet根據b返回值給ajax;
public int upOrderByType(int type, int oid, int zt,int udid) { int b = 0; String sql = null; if (type == 1 || type == 4) { sql = "update h_order set yyztid = ? where oid=? "; try { b = queryRunner.update(sql, zt, oid); } catch (SQLException throwables) { throwables.printStackTrace(); } } if(type==3){ //週一到週五之間修改的條數 String sql1="select COUNT(OID) from h_order where udid=? AND yyztid=23\n" + "and rdate >( subdate(rdate, date_format(RDATE,'%w')-1))\n" + "and rdate >( subdate(rdate, date_format(RDATE,'%w')-5))\n" ; //當天修改的條數 String sql2="select count(oid) from h_order where udid=26 and yyztid=23 DATE_FORMAT(rdate,'%Y-%m-%d') = CURDATE() "; //條件滿足後要執行的sql; sql="update h_order set yyztid = ? where oid=?"; try { int m = queryRunner.query(sql1, new ScalarHandler<BigInteger>()).intValue(); int n = queryRunner.query(sql2, new ScalarHandler<BigInteger>()).intValue(); if(m<2 && n<1){ int update = queryRunner.update(sql, zt, oid); if(update>0){ b=1; } } } catch (SQLException throwables) { throwables.printStackTrace(); } } return b; }