Oracle日期相关
2019獨角獸企業重金招聘Python工程師標準>>>
Oracle中日期的表示:
select?to_char(sysdate,'CC?WW?W?D?DDD?YYYY/MM/DD?year?month?day')?FROM?DUAL
其中
CC????為世紀
WW?為一年中的周
W??????為一個月中的周
D???????為星期幾
DDD?為一年中的第幾天
year???為年?
month?為月?
day??????為星期幾
SQL>???select?to_char(sysdate,'day')?from?dual;?
IW,WW的區別
IW:ISO標準周
WW:oracle標準周
舉例:
SELECT?to_char(to_date('20051203','yyyymmdd'),'WW')?"WW03",
???????to_char(to_date('20051203','yyyymmdd'),'IW')?"IW03",
???????to_char(to_date('20051204','yyyymmdd'),'WW')?"WW04",
???????to_char(to_date('20051204','yyyymmdd'),'IW')?"WW04",
???????to_char(to_date('20051205','yyyymmdd'),'WW')?"WW05",
???????to_char(to_date('20051205','yyyymmdd'),'IW')?"WW05"
FROM?dual;?
Oracle中發現的WW和IW的規律
WW:
?????每年的1月1日作為當年的第一周的第一天(不管當年的1月1日是星期幾);
?????比如:2004/01/01?是周四,?在Oracle中被定義為2004年WW的第一周的第一天;
?????SELECT?TO_CHAR(TO_DATE('20040101','YYYYMMDD'),'YY:WW'),TO_CHAR(TO_DATE('20040107','YYYYMMDD'),'YY:WW'),TO_CHAR(TO_DATE('20040108','YYYYMMDD'),'YY:WW')?FROM?DUAL;
IW?:
????以周別為“主線”?,每年最多可以有53個周B別,但是每年至少要包含52個周別;
如果一年當中第52周別之后至當年的12月31日之間,還有大于或等于4天的話,則定為當年的第53周,否則剩余這些天數被歸為下一年的第1周;如果在不足52周別的話,則以下一年的時間來補;每周固定的從周一開始作為本周的第1天,到周日作為本周的第7天;比如:在Oracle中?2006/01/01?依然屬于IW周別?05年的第52周的第7天
SELECT?TO_CHAR(TO_DATE('20051226','YYYYMMDD'),'IY:IW'),TO_CHAR(TO_DATE('20060101','YYYYMMDD'),'IY:IW')?FROM?DUAL;
?
關于Oracle?to_char()函數中的IW,WW?周別顯示?
===========================================================?
作者:?tolywang(http://tolywang.itpub.net)
發表于:2008.03.24?09:49
分類:?Oracle數據庫管理?
出處:http://tolywang.itpub.net/post/48/458073
---------------------------------------------------------------?
查今天是?"今年"?的第幾周?
select?to_char(sysdate,'ww')?from?dual;?
或?
select?to_char(sysdate,'iw')?from?dual;?
附注:?
上文所提之iw及ww格式在doc內解釋如下?
IW?=?Week?of?year?(1-52?or?1-53)?based?on?the?ISO?standard?
WW?=?Week?of?year?(1-53)?where?week?1?starts?on?the?first?day?of?the?year?and?continues?to?the?seventh?day?of?the?year.?
?
周日都是第12周
select?to_char(to_date('20080323','yyyymmdd'),'WW')?from?dual;
select?to_char(to_date('20080323','yyyymmdd'),'IW')?from?dual;?
周一其中一個是?12?周,一個是第?13?周?。?按照中國習慣應該式?IW?(ISO?Standard?Week?)?比較合適?。?
select?to_char(to_date('20080324','yyyymmdd'),'WW')?from?dual;
select?to_char(to_date('20080324','yyyymmdd'),'IW')?from?dual;?
tolywang?發表于:2008.03.24?09:49?::分類:?(?Oracle數據庫管理?)?::閱讀:(2468次)?::?評論?(2)?::?引用?(0)?
re:?關于Oracle?to_char()函數中的IW,WW?周別顯示?[回復]?
詳細講解Oracle數據庫的“周數計算”?
1、日期計算,算第n周的第一天及最后一天是幾號。?
1)ww的算法為每年1月1日為第一周開始,date+6為每一周結尾?
例如20050101為第一周的第一天,而第一周的最后一天為20050101+6=20050107?
公式?每周第一天?:date?+?周?*?7?-?7?
每周最后一天:date?+?周?*?7?-?1?
你會發現怎么編排格式都會跑掉。?
2、日期計算,算第n周的第一天及最后一天是幾號。?1)ww的算法為每年1月1日為第一周開始,date+6為每一周結尾?
例如20050101為第一周的第一天,而第一周的最后一天為20050101+6=20050107?
公式?每周第一天?:date?+?周?*?7?-?7?
每周最后一天:date?+?周?*?7?-?1?
如果以ww格式為主,第1、17周的起迄如下?
127.0.0.1:asdb:WF>select?to_date('20050101','yyyymmdd')?+?1*7-7,to_date('20050101','yyyymmdd')?+?1*7-1?from?dual;?
TO_DATE('?TO_DATE('?
01-JAN-05?07-JAN-05?
127.0.0.1:asdb:WF>select?to_date('20050101','yyyymmdd')?+?17*7-7,to_date('20050101','yyyymmdd')?+?17*7-1?from?dual;?
TO_DATE('?TO_DATE('?
23-APR-05?29-APR-05?
Elapsed:?00:00:00.00?
驗證如下?
127.0.0.1:asdb:WF>select?to_char(to_date('20050422','yyyymmdd'),'ww')?as?weekn,to_char(to_date('20050423','yyyymmdd'),'ww')?as?week1,to_char(to_date('20050429','yyyymmdd'),'ww')?as?week2,to_char(to_date('20050430','yyyymmdd'),'ww')?as?weekn2?from?dual;?
WEEK?WEEK?WEEK?WEEK?
16?17?17?18?
Elapsed:?00:00:00.00?
127.0.0.1:asdb:WF>?
2)iw的算法為星期一至星期日算一周,且每年的第一個星期一為第一周,?
?例如20050101為星期六,所以用iw的算法是前年的53周,而20050103之后才是第一周的開始。?
公式?每周第一天?:next_day(date)?+?周?*?7?-?7?
每周最后一天:next_day(date)?+?周?*?7?-?1?
如果以iw格式為主,第1、17周的起迄如下?
127.0.0.1:asdb:WF>select?next_day(to_date('20050101','yyyymmdd'),'MONDAY')+?1?*?7?-?7?as?first_day,next_day(to_date('20050101','yyyymmdd'),'MONDAY')+?1?*?7?-?1?as?last_day?from?dual;?
FIRST_DAY?LAST_DAY?
03-JAN-05?09-JAN-05?
Elapsed:?00:00:00.00?
127.0.0.1:asdb:WF>?
127.0.0.1:asdb:WF>select?next_day(to_date('20050101','yyyymmdd'),'MONDAY')+?17?*?7?-?7?as?first_day,next_day(to_date('20050101','yyyymmdd'),'MONDAY')+?17?*?7?-?1?as?last_day?from?dual;?
FIRST_DAY?LAST_DAY?
25-APR-05?01-MAY-05?
Elapsed:?00:00:00.00?
127.0.0.1:asdb:WF>?
驗證如下?
127.0.0.1:asdb:WF>select?to_char(to_date('20050424','yyyymmdd'),'iw')?as?weekn,to_char(to_date('20050425','yyyymmdd'),'iw')?as?week1,to_char(to_date('20050501','yyyymmdd'),'iw')?as?week2,to_char(to_date('20050502','yyyymmdd'),'iw')?as?weekn2?from?dual;?
WEEK?WEEK?WEEK?WEEK?
----?----?----?----?
16?17?17?18?
Elapsed:?00:00:00.00?
3)其它:?
A、查今天是?"本月"?的第幾周?
SELECT?TO_CHAR(SYSDATE,'WW')?-?TO_CHAR(TRUNC(SYSDATE,'MM'),'WW')?+?1?AS?"weekOfMon"?from?dual;?
或?
SELECT?TO_CHAR(SYSDATE,'W')?AS?"weekOfMon"?from?dual;?
B、查今天是?"今年"?的第幾周?
select?to_char(sysdate,'ww')?from?dual;?
或?
select?to_char(sysdate,'iw')?from?dual;?
附注:?
上文所提之iw及ww格式在doc內解釋如下?
IW?=?Week?of?year?(1-52?or?1-53)?based?on?the?ISO?standard?
WW?=?Week?of?year?(1-53)?where?week?1?starts?on?the?first?day?of?the?year?and?continues?to?the?seventh?day?of?the?year.
tolywang?評論于:2008.03.24?10:02?
re:?關于Oracle?to_char()函數中的IW,WW?周別顯示?[回復]?
SQL>?select?to_char(to_date('2009-01-01','yyyy-MM-dd'),'iw')?from?dual;
TO_CHAR(TO_DATE('2009-01-01','
------------------------------
01
2009-01-01是2009年第一周,是星期四,如果按你給的IW?計算一周第一天,和最后一天來計算本年的第二周的第一天和最后一天,就相差一周
SQL>?select?to_char(next_day(to_date('2009-01-01','yyyy-MM-dd'),'星期一')+2*7-7,'yyyy-MM-dd')?as?firstDay,to_char(next_day(to_date('2009-01-01','yyyy-MM-dd'),'星期一')+2*7-1,'yyyy-MM-dd')?as?lastDay?from?dual;
FIRSTDAY?LASTDAY
----------?----------
2009-01-12?2009-01-18
SQL>?select?to_char(to_date('2009-01-12','yyyy-MM-dd'),'iw')?from?dual;
TO_CHAR(TO_DATE('2009-01-12','
------------------------------
03
隨便介紹幾個其它函數的用法:?
如獲得完整的時間格式?
select?to_char(sysdate,'yyyy-mm-dd?hh24:mi:ss')?from?dual;
本月的天數?
SELECT?to_char(last_day(SYSDATE),'dd')?days?FROM?dual?
今年的天數?
select?add_months(trunc(sysdate,'year'),?12)?-?trunc(sysdate,'year')?from?dual?
下個星期一的日期?
SELECT?Next_day(SYSDATE,'monday')?FROM?dual
轉載于:https://my.oschina.net/HuifengWang/blog/233010
總結
以上是生活随笔為你收集整理的Oracle日期相关的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库如何闪回到某个时间点?
- 下一篇: 位操作:BitVector32结构 z