Oracle如何根據乙個日期計算同比環比的日期

2021-07-13 15:20:17 字數 1082 閱讀 4849

iamlaosong文

在寫統計查詢的sql語句時,經常會碰到根據乙個查詢日期推演其它日期的問題,如同比、環比等。

1、字串轉換成日期:to_date('2016-6-16', 'yyyy-mm-dd')

2、統計當月累計需要當月第一天:trunc(to_date('2016-6-16', 'yyyy-mm-dd'),'mm'),'mm'也可以寫成'month'

3、統計當年累計需要當年第一天:trunc(

to_date('2016-6-16', 'yyyy-mm-dd'),'yy'),'yy'也可以寫成'year'

4、有時需要當月最後一天:last_day(to_date('2016-6-16', 'yyyy-mm-dd'))

5、環比需要用到上月同期:add_months(to_date('2016-6-16', 'yyyy-mm-dd'),-1)

6、同比需要用到去年同期:add_months(to_date('2016-6-16', 'yyyy-mm-dd'),-12)

7、組合-去年同期第一天:trunc(

add_months(to_date('2016-6-16', 'yyyy-mm-dd'),-12),'mm')

8、兩個日期之間的天數:to_date('2016-6-16', 'yyyy-mm-dd')-to_date('2016-6-10', 'yyyy-mm-dd')

9、兩個日期之間的月數:months_between(to_date('2016-6-16', 'yyyy-mm-dd'),to_date('2016-1-16', 'yyyy-mm-dd')),注意,兩個日期如果日數不同,則會出現小數,如months_between(to_date('2016-6-16', 'yyyy-mm-dd'),to_date('2016-5-6', 'yyyy-mm-dd'))的結果是1.32258064516129,其中的小數部分是多餘的天數除以31的結果。

比較欣慰的是當日期是當月的最後一天時,計算同比或者環比日期時,系統會自動調整為該月最後一天。例如,add_months(to_date('2016-4-30', 'yyyy-mm-dd'),-1)的結果是2016-3-31,這個結果對於按月統計是很有好處的。

如何根據VESA表新增乙個EDID

如何根據vesa表新增乙個edid 1.先介紹一下edid是什麼 其中,timing資訊又分為vesa video hdmi dp detailed timing,video資訊只能在後128位,detailed timing在前128位只有四組,後128位有幾組視情況而定。vga和dvi的edid...

ORACLE如何停止乙個JOB

oracle 如何停止乙個 job dba jobs all jobs user jobs 包含登入使用者所有的 job資訊 dba jobs running 包含正在執行 job相關資訊 注意 須使用oracle 的sys 使用者登入到資料庫,才能檢視 dba jobs running,v pro...

oracle 如何優化乙個語句

這是個終極問題,因為優化本身的複雜性實在是難以總結的,很多時候優化的方法並不是用到了什麼高深莫測的技術,而只是乙個思想意識層面的差異,而這些都很可能連帶導致效能表現上的巨大差異。所以有時候我們應該先搞清楚需求到底是什麼,sql本身是否合理,這些思考很可能會使優化工作事半功倍。而本文是假設sql本身合...