Oracle數據庫高頻技巧

1. 獲取某段時間中的含有數據的日期集合

select substr(day_hhmmss,0,8) 列別名 from 數據表名 t    // t為數據表名的別名
where (day_hhmmss between '20160228' and '20160311235959') 
group by substr(day_hhmmss,0,8)  //group by 用于分組
//此處也可以添加  order by 列別名  來排序

結果為:

20160305
20160306
20160307
20160311
20160304
20160308
20160309
20160310

注意:between...and...需格外注意

day_hhmmss between '20160228' and '20160311235959'
//時間段為(2016年2月28日零點)到(2016年3月11日23點59分59秒)間的所有時間點

day_hhmmss between '20160228' and '20160311'
//時間段為(2016年2月28日零點)到(2016年3月11日零點)間的所有時間點,但不包括29號當天的所有數據

2.獲取某段時間中的所有日期集合

獲取20160228到20160311間的所有日期集合

select to_char(to_date('20160228','yyyyMMdd') + rownum - 1, 'yyyyMMdd') 列別名
from dual
connect by rownum <= trunc(to_date('20160311','yyyyMMdd') - to_date('20160228', 'yyyyMMdd')) + 1

結果為:

20160228
20160229
20160301
20160302
20160303
20160304
20160305
20160306
20160307
20160308
20160309
20160310
20160311

3.獲取某段時間中沒有數據的日期集合

數據庫中minus用于兩個集合做減法

select to_char(to_date('20160228','yyyyMMdd') + rownum - 1, 'yyyyMMdd') 列別名
from dual
connect by rownum <= trunc(to_date('20160311','yyyyMMdd') - to_date('20160228', 'yyyyMMdd')) + 1
minus
(select substr(day_hhmmss,0,8) 列別名
from 數據表名 t
where (day_hhmmss between '20160228' and '20160311235959') 
group by substr(day_hhmmss,0,8))

結果為:

20160228
20160229
20160301
20160302
20160303

4.合并列:行變列

使用wm_concat() 函數

select wm_concat(列別名) 新列別名from(
  select to_char(to_date('20160228','yyyyMMdd') + rownum - 1, 'yyyyMMdd') 列別名
  from dual
  connect by rownum <= trunc(to_date('20160311','yyyyMMdd') - to_date('20160228', 'yyyyMMdd')) + 1
  minus
  (select substr(day_hhmmss,0,8) 列別名
   from 數據表名 t
   where (day_hhmmss between '20160228' and '20160311235959')
   group by substr(day_hhmmss,0,8))
 )

結果為:

20160228,20160229,20160301,20160302,20160303

5.統計數據表中各相同數據的數據量

    select count(*) as num,t.時間列名 as 時間 from 數據庫 t where t.時間列名 between '起始時間' and '結束時間' group by t.時間列名

結果為:

num 時間
20 201608081255
52 201608081256
87 201608081257
24 201608081258
15 201608081259

6.獲取當前系統時間

 select sysdate as 當前系統時間 from dual

結果為:

2016/8/10 10:33:05

7.統計某段時間內每十五分鐘獲取到的數據量

 select to_char(to_date(t.時間列名, 'yyyymmddhh24miss'), 'yyyy-mm-dd hh24')||':'||floor(to_char(to_date(t.t.時間列名, 'yyyymmddhh24mi'), 'mi')/15)*15 時間, 
count(*) num
from 數據庫 t where t.時間列名 between '起始時間' and '結束時間'
group by to_char(to_date(t.時間列名, 'yyyymmddhh24mi'), 'yyyy-mm-dd hh24')||':'||floor(to_char(to_date(t.時間列名, 'yyyymmddhh24mi'), 'mi')/15)*15
order by to_char(to_date(t.時間列名, 'yyyymmddhh24mi'), 'yyyy-mm-dd hh24')||':'||floor(to_char(to_date(t.t.時間列名, 'yyyymmddhh24mi'), 'mi')/15)*15

結果為:

時間  num
2016-08-09 00:0 1526
2016-08-09 00:15 1856
2016-08-09 00:30 16
2016-08-09 00:30 26
2016-08-09 00:45 152
2016-08-09 01:0 15
2016-08-09 01:15 1526
2016-08-09 01:30 156
2016-08-09 01:30 26
2016-08-09 01:45 126

8.統計某段時間內存在數據量的十五分鐘的數目

select  count(distinct to_char(to_date(t.時間列名, 'yyyymmddhh24miss'),'yyyymmddhh24')||floor(to_char(to_date(t.時間列名, 'yyyymmddhh24miss'),'mi')/15)*15)  num
from 數據表 t where t.時間列名 between '起始時間' and '結束時間'

結果是:

num
96
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容