oracle的sql:24小時一天分成12個時段

WITH T AS
     (SELECT rownum rn FROM DUAL CONNECT BY rownum<=12)
SELECT 
(CASE WHEN 
     TO_NUMBER(TO_CHAR(SYSDATE,'hh24')) > 8 THEN 
     TO_CHAR(TO_DATE(CONCAT(TO_CHAR(SYSDATE,'yyyy-MM-dd'),' 08:00:00'),'yyyy-MM-dd hh24:mi:ss') + (rownum-1)*2/24,'yyyy-MM-dd hh24:mi:ss')
 ELSE 
     TO_CHAR(TO_DATE(CONCAT(TO_CHAR(SYSDATE-1,'yyyy-MM-dd'),' 08:00:00'),'yyyy-MM-dd hh24:mi:ss') + (rownum-1)*2/24,'yyyy-MM-dd hh24:mi:ss')
 END
) STARTDATE,
(CASE WHEN 
     TO_NUMBER(TO_CHAR(SYSDATE,'hh24')) > 8 THEN 
     TO_CHAR(TO_DATE(CONCAT(TO_CHAR(SYSDATE+1,'yyyy-MM-dd'),' 08:00:00'),'yyyy-MM-dd hh24:mi:ss') - (24-rownum*2)/24,'yyyy-MM-dd hh24:mi:ss')
 ELSE 
     TO_CHAR(TO_DATE(CONCAT(TO_CHAR(SYSDATE,'yyyy-MM-dd'),' 08:00:00'),'yyyy-MM-dd hh24:mi:ss') - (24-rownum*2)/24,'yyyy-MM-dd hh24:mi:ss')
 END
) ENDDATE

FROM T 

--------------在oracle中直接運行即可(前一天的八點到今天的八點爲一天計算)

解釋:

SELECT rownum rn FROM DUAL CONNECT BY rownum<=12       -------------------------僞列,查詢此句顯示爲1到12的數字如下

RN

11
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12

CASE WHEN 
     TO_NUMBER(TO_CHAR(SYSDATE,'hh24')) > 8 THEN  -------------------------可判斷取時間頭天的8點到今天的八點

TO_CHAR(TO_DATE(CONCAT(TO_CHAR(SYSDATE+1,'yyyy-MM-dd'),' 08:00:00'),'yyyy-MM-dd hh24:mi:ss') - (24-rownum*2)/24,'yyyy-MM-dd hh24:mi:ss')  -------------根據case when組合時間,在轉換成時間 類型後,再根據要分時間的長度進行時間的加減計算,然後再轉換成char型


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章