select
T31267.CREATED_DATE as F31265,
(select to_char(to_date(T31267.CREATED_DATE,'yyyy-mm-dd'),'yyyyiw') from dual) as week
from LEAP.HMDM_DM_DLR_CLUE T31267
總結:
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 dual
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()函數在截取時不進行四舍五入,直接截取。
針對數字的案例,如:
select trunc(123.458) from dual --123
select trunc(123.458,0) from dual --123
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.html
https://www.oschina.net/question/44870_3710