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