遇到的問題也很簡單:
表1是一個統計信息表,每小時整點的時候統計一次,歷史統計的數據不刪除,統計時間字段為createdtime.
前臺展示的時候,按照最后一次統計出來的數據進行處理展示。
查詢sql為:
..... where createdtime = (select max(createdtime) from 表1)....
但是后來發現,統計時間有時候會超過一秒,導致10:00開始統計,有些數據的createtime = '..... 10:00:00',有些數據的createtime = '..... 10:00:01',導致前臺展示不準確。
用了一個比較笨的辦法解決,也是不是太嚴謹的辦法解決,因為確定統計最長時間也就是1-2秒,所以將查詢sql改為:
..... where createdtime > (select max(createdtime)-(5/24/60/60) from 表1)....
查詢最晚的統計時間,計算前五秒得到一個時間,查詢sql createdtime > 這個計算后的時間。
Oracle時間日期操作
sysdate+(5/24/60/60) 在系統時間基礎上延遲5秒
sysdate+5/24/60 在系統時間基礎上延遲5分鐘
sysdate+5/24 在系統時間基礎上延遲5小時
sysdate+5 在系統時間基礎上延遲5天
add_months(sysdate,-5) 在系統時間基礎上延遲5月
add_months(sysdate,-5*12) 在系統時間基礎上延遲5年
- 上月末的日期:select last_day(add_months(sysdate, -1)) from dual;
- 本月的最后一秒:select trunc(add_months(sysdate,1),'MM') - 1/24/60/60 from dual
- 本周星期一的日期:select trunc(sysdate,'day')+1 from dual
- 年初至今的天數:select ceil(sysdate - trunc(sysdate, 'year')) from dual;
- 今天是今年的第幾周 :select to_char(sysdate,'fmww') from dual
- 今天是本月的第幾周:SELECT TO_CHAR(SYSDATE,'WW') - TO_CHAR(TRUNC(SYSDATE,'MM'),'WW') + 1 AS "weekOfMon" FROM dual
- 本月的天數:SELECT to_char(last_day(SYSDATE),'dd') days FROM dual
- 今年的天數:select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual
- 下個星期一的日期:SELECT Next_day(SYSDATE,'monday') FROM dual
判斷當前時間是上午下午還是晚上
SELECT CASE
WHEN to_number(to_char(SYSDATE,'hh24')) BETWEEN 6 AND 11 THEN '上午'
WHEN to_number(to_char(SYSDATE,'hh24')) BETWEEN 11 AND 17 THEN '下午'
WHEN to_number(to_char(SYSDATE,'hh24')) BETWEEN 17 AND 21 THEN '晚上'
END
FROM dual;