1. 程式人生 > >關於時間差查詢的一個小技巧

關於時間差查詢的一個小技巧

log sele 日期 where integer 時間差 時間 logs sql

  求2個時間差,通常用datediff函數:DATEDIFF(datepart,startdate,enddate)

    startdate 和 enddate 參數是合法的日期表達式。

    datepart 參數可以是小時、分、秒等

  但是sql裏datediff是三個參數,mySql裏只支持2個參數,所以對於mysql來說,處理時間差的查詢就不是那麽容易。

  但是可以換一個思路:比如要查詢12小時之前的數據,我們可以利用:現在的時間 - 12小時,得到提前12小時的時間,然後查詢在此時間之前的數據即可。

  MySql:SELECT * from cems_deviceinfo where lastActiveTime < DATE_SUB(NOW(),INTERVAL 12 HOUR)

  需求解決的代碼:

  @Override
    public int queryUnUseDevice(Integer unUsedTime) {
        String hql = "SELECT count(*) from cems_deviceinfo where lastActiveTime < DATE_SUB(NOW(),INTERVAL :unUsedTime HOUR)";
        return Integer.parseInt(getSession().createSQLQuery(hql).setParameter("unUsedTime", unUsedTime).uniqueResult().toString());
    }

關於時間差查詢的一個小技巧