oracle 按日输出 取整数,Oracle按日周月分組統計,及next_day()函數詳解
1.概述
工作中遇到如下問題:統(tǒng)計(jì)周期內(nèi)關(guān)鍵詞數(shù),而這里的周期內(nèi)最常用的就是日周月。
日月比較容易處理,周的話可以通過next_day()函數(shù)實(shí)現(xiàn)。
2.實(shí)例問題
如下,有一張表ljb_test,包括兩個(gè)字段:test_time DATE,city varchar2(4)。
下面我想統(tǒng)計(jì),不同周期范圍內(nèi)的不同城市的記錄總數(shù)。這里的不同周期為日周月。
該問題的核心就是處理日期時(shí)間,即如何讓同一周期范圍內(nèi)的時(shí)間返回同一個(gè)值,且該值是唯一的。
如下,每個(gè)期間將會(huì)提供兩種方式,需要指出的是,trunc()函數(shù)總是效率高。
2.1按照日統(tǒng)計(jì)
--效率高
select trunc(test_time,'DD') time,count(1) ct
from ljb_test
group by trunc(test_time,'DD')
order by time;
或者
select to_char(test_time,'YYYYMMDD') time,count(1) ct
from ljb_test
group by to_char(test_time,'YYYYMMDD')
order by time;
以此類推按照小時(shí)統(tǒng)計(jì),把時(shí)間處理為
trunc(test_time,’HH24’)
或者
to_char(test_time,’YYYYMMDD HH24’)
2.2按照周統(tǒng)計(jì)
按照周統(tǒng)計(jì)問題的核心,就是如何讓同一周的時(shí)間返回同一值。
Oracle提供了一個(gè)函數(shù)next_day()
next_day(date,n):計(jì)算date時(shí)間后下一個(gè)星期幾的時(shí)間。n可以傳遞字符串,如’星期一’,’monday’。還可以傳遞數(shù)值,1代表周日。
因?yàn)檎Z(yǔ)言問題,這里推薦使用數(shù)字試下。
有這個(gè)函數(shù),就可以實(shí)現(xiàn)了。
只需要對(duì)日期做如下處理:
trunc(next_day(test_time-7,2),’DD’)
其實(shí)trunc()函數(shù)可以直接實(shí)現(xiàn)返回周一。
trunc(test_time,’iw’)
之所以介紹next_day()函數(shù),如果我們傳入的日期字段是varchar2類型的,那么兩種方式簡(jiǎn)易成都一樣。
如下,把完成的SQL寫出:
--效率高
select trunc(test_time,'iw') time, count(1) ct
from ljb_test
group by trunc(test_time,'iw')
order by time;
或者
select trunc(next_day(test_time-7,2),'DD') time ,count(1) ct
from ljb_test
group by trunc(next_day(test_time-7,2),'DD')
order by time;
2.3按月統(tǒng)計(jì)
按月統(tǒng)計(jì)和按天統(tǒng)計(jì)一樣
--效率高
select trunc(test_time,'MM') time,count(1) ct
from ljb_test
group by trunc(test_time,'MM')
order by time;
或者select to_char(test_time,'YYYYMM') time,count(1) ct
from ljb_test
group by to_char(test_time,'YYYYMM')
order by time;
總結(jié)
以上是生活随笔為你收集整理的oracle 按日输出 取整数,Oracle按日周月分組統計,及next_day()函數詳解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 过程 oracle 写在哪里,Oracl
- 下一篇: oracle往据,指定日期查询数Orac