在oracle中我們經(jīng)常會和日期打交道,在做報表的時候經(jīng)常會用日報,周報,月報之類的條件進行分組;
在Oracle中我們經(jīng)常會和日期打交道,在做報表的時候經(jīng)常會用日報,周報,月報之類的條件進行分組;
我寫了些例子來啟發(fā)下大腦
select Sysdate from dual
select to_char(sysdate,'yyyy') as 年 from dual
select to_char(sysdate,'mm') as 月 from dual
select to_char(sysdate,'dd') as 日 from dual
select to_char(sysdate,'iw') as 周一到周日為一周 from dual
select to_char(sysdate,'ww') as 一月一日加6為一周類推 from dual
select to_char(sysdate,'HH24:mi:ss') as 時分秒 from dual
--根據(jù)年分組
select to_char(sysdate,'yyyy') as 年 from dual
--根據(jù)月分組
select to_char(sysdate,'yyyy-mm') as 年 from dual
--根據(jù)天分組
select to_char(sysdate,'yyyy-mm-dd') as 年 from dual
--根據(jù)周分組
select to_char(sysdate,'yyyy-iw') as 年 from dual
select to_char(sysdate,'yyyy-ww') as 年 from dual
注意:
按照周進行分組會出現(xiàn)問題:如:2012年12月31日 是周一所以就會歸結(jié)到2013年的第一周中,iw查詢出來的結(jié)果是01但是yyyy對應(yīng)的是還2012所以就和2012年一月的第一周無法區(qū)分開。
方法二:
查詢出指定日期所在周的開始結(jié)束的時間:
--規(guī)定每周是從周一開始,周末結(jié)束
select next_day(sysdate,2)-7 from dual --得到周一
select next_day(sysdate,1) from dual --得到周末
next_day() 獲取下一個周日(1),一(2),二(3),三(4),四(5),,五(6),六(7)
用中文也是可以的:
--規(guī)定每周是從周一開始,周末結(jié)束
select next_day(sysdate,'星期一')-7 from dual --得到周一
select next_day(sysdate,'星期日') from dual --得到周末
得到日期范圍后將這個范圍拼接在一起進行分組就可以了
--根據(jù)省份分組,省份列種包含市(福建福州,黑龍江牡丹江)
/*
思路:1.先用substr(列明,開始位置第一個為1,截取字數(shù))來切割省份列
2.截取后黑龍江變成黑龍后要恢復(fù)回來
case
when substr(列名,1,2) like '黑龍' then '黑龍江'
when substr(列名,1,2) like '內(nèi)蒙' then '內(nèi)蒙古'
else
to_char(substr(列明,1,2))
end
*/
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com