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