Oracle--計算某一日期爲一年中的第幾周

我本身實現的腳本:

selecthtml

T31267.CREATED_DATE as F31265,git

(select to_char(to_date(T31267.CREATED_DATE,'yyyy-mm-dd'),'yyyyiw') from dual) as weekoracle

from  LEAP.HMDM_DM_DLR_CLUE T31267函數

 

總結:post

select to_char(TO_DATE('20110101', 'YYYYMMDD'), 'yyyyiw') as week, --oracle求當年的第幾周  #經常使用,可是有一個問題,好比20181231是週一,可是卻計算結果爲201801,即2018第一週內。
       to_char(TO_DATE('20110101', 'YYYYMMDD'), 'yyyyww') as week2, --oracle求當年的第幾周
       to_char(TO_DATE('20110101', 'YYYYMMDD'), 'yyyy') as year, --oracle求第幾年
       to_char(TO_DATE('20110101', 'YYYYMMDD'), 'yyyymm') as month, --oracle求當年的第幾月
       to_char(TO_DATE('20110101', 'YYYYMMDD'), 'yyyyddd') as day, --oracle求當年的第幾天
       to_char(TO_DATE('20110401', 'YYYYMMDD'), 'yyyyq') as quarter -- oracle求當年的第幾季度

  from dualspa

 

ww Same day of the week as the first day of the year  按年度1月1日的第一天爲每週第一天
iw Same day of the week as the first day of the ISO week, which is Monday  每週一
w Same day of the week as the first day of the month  按月份1日的第一天做爲每週第一天

這3個參數均爲取每週第一天,區別以下:

ww,按每一年的1月1日爲第一週第一天,1月8日爲第二週第一天……依此類推。

2010-1-1爲2010年第一週第一天,取第一週的第一天,仍然爲2010-1-1
SQL> select trunc(date'2010-1-1','w') from dual;    
 
TRUNC(DATE'2010-1-1','W')
-------------------------
2010-1-1

2010-1-6爲2010年第一週第六天,取第一週的第一天,爲2010-1-1
SQL> select trunc(date'2010-1-6','w') from dual;
 
TRUNC(DATE'2010-1-6','W')
-------------------------
2010-1-1

2010-1-9爲2010年第二週次日,取這一週的第一天,爲2010-1-8
SQL> select trunc(date'2010-1-9','w') from dual;
 
TRUNC(DATE'2010-1-9','W')
-------------------------
2010-1-8

w與ww功能相似,不過它是按每個月的1日爲每週第一天,例如1日爲當月第一週第一天,8日爲第二週第一天……依此類推。
那也就是說,1月份的參數w與ww用trunc函數的結果應該是一致的。

2010-3-1爲當月第一週第一天,所以結果爲2010-3-1
SQL> select trunc(date'2010-3-1','w') from dual;
 
TRUNC(DATE'2010-3-1','W')
-------------------------
2010-3-1

 2010-3-8爲當月第二週第一天,第二週第一天爲2010-3-8
SQL> select trunc(date'2010-3-8','w') from dual;
 
TRUNC(DATE'2010-3-8','W')
-------------------------
2010-3-8
 
 2010-3-9爲當月第二週次日,2010-3-8爲第二週第一天
SQL> select trunc(date'2010-3-9','w') from dual;
 
TRUNC(DATE'2010-3-9','W')
-------------------------
2010-3-8

iw,不受月份與年份的影響,直接取日期參數的週一。
SQL> select trunc(date'2010-3-9','iw') from dual;
 
TRUNC(DATE'2010-3-9','IW')
--------------------------
2010-3-8
 
 
參考:

TRUNC(number,num_digits) 
Number 須要截尾取整的數字。 
Num_digits 用於指定取整精度的數字。Num_digits 的默認值爲 0。若是Num_digits爲正數,則截取小數點後Num_digits位;若是爲負數,則先保留整數部分,而後從個位開始向前數,並將遇到的數字都變爲0。
TRUNC()函數在截取時不進行四捨五入,直接截取。.net

針對數字的案例,如:htm

select trunc(123.458) from dual --123ci

select trunc(123.458,0) from dual --123it

select trunc(123.458,1) from dual --123.4

select trunc(123.458,-1) from dual --120

select trunc(123.458,-4) from dual --0

select trunc(123.458,4) from dual --123.458

select trunc(123) from dual --123

select trunc(123,1) from dual --123

select trunc(123,-1) from dual --120

 

針對日期的案例,如:

select trunc(sysdate) from dual --2017/6/13  返回當天的日期

select trunc(sysdate,'yyyy') from dual   --2017/1/1  返回當年第一天.

select trunc(sysdate,'mm') from dual  --2017/6/1  返回當月第一天.

select trunc(sysdate,'d') from dual  --2017/6/11 返回當前星期的第一天(以週日爲第一天).

select trunc(sysdate,'dd') from dual  --2017/6/13  返回當前年月日

select trunc(sysdate,'hh') from dual  --2017/6/13 13:00:00  返回當前小時

select trunc(sysdate,'mi') from dual  --2017/6/13 13:06:00  返回當前分鐘

 

其餘優秀連接推薦:

https://www.2cto.com/database/201302/191827.htmlhttps://www.oschina.net/question/44870_3710

相關文章
相關標籤/搜索