總的來說周數的算法有兩種:
算法一:iw算法,每周為星期一到星期日算一周,且每年的第一個星期一為第一周,就拿2014年來說,2014-01-01是星期三,但還是算為今年的第一周,可以簡單的用sql函數獲取當前的周數:
PgSQL
SQL> SELECT to_char(SYSDATE, 'iw'),sysdate from dual;
TO SYSDATE
-- ---------
02 07-JAN-14
1
2
3
4
5
SQL>SELECTto_char(SYSDATE,'iw'),sysdatefromdual;
TOSYSDATE
-- ---------
0207-JAN-14
可以看到2014-01-07是第二周,但是有一個地方需要注意,按照這樣的算法,一年中要么是52周,或者53周,如果一年當中的第52周之后至當年的12月31日之前,還有大于或等于4天的話,那這幾天就定為當年的第53周,如果不足4天,就將剩余的這些天數歸為下一年的第一周,就拿今年舉例,2013年30日和31日落單,不足4天,所以2013年只有52周,這2天定位2014年的第一周。
此外還有一個地方需要注意,比如2014-01-01是周三,2014年的第一個周一是2014-01-06,結果是第一個周一已經算是第二周了,這樣程序處理起來可能比較麻煩,后面我們將會說明怎么處理。
算法二:ww算法,每年的1月1日作為當年的第一周的第一天,不管當年的1月1日是星期幾,用sql表達就是
PgSQL
SQL> SELECT to_char(SYSDATE, 'ww'),sysdate from dual;
TO SYSDATE
-- ---------
01 07-JAN-14
1
2
3
4
5
SQL>SELECTto_char(SYSDATE,'ww'),sysdatefromdual;
TOSYSDATE
-- ---------
0107-JAN-14
可以看到這兩種算法得出來的結果不一致,這種算法可能第一周和最后一周不足7天。但是算法簡單。
通過如上兩種算法,就可以得到日期的周數。
PgSQL
SQL> SELECT to_char(to_date('20140107', 'YYYY-MM-DD'),'iw') from dual;
TO
--
02
1
2
3
4
5
SQL>SELECTto_char(to_date('20140107','YYYY-MM-DD'),'iw')fromdual;
TO
--
02
另外附上用于日期和時間的Format:
FORMAT 描述
HH 一天的小時數 (01-12)
HH12 一天的小時數 (01-12)
HH24 一天的小時數 (00-23)
MI 分鐘 (00-59)
SS 秒 (00-59)
MS 毫秒 (000-999)
US 微秒 (000000-999999)
SSSS 午夜后的秒 (0-86399)
AM 或 A.M. 或 PM 或 P.M. 正午標識(大寫)
am 或 a.m. 或 pm 或 p.m. 正午標識(小寫)
Y,YYY 帶逗號的年(4 和更多位)
YYYY 年(4和更多位)
YYY 年的后三位
YY 年的后兩位
Y 年的最后一位
IYYY ISO 年(4位或更多位)
IYY ISO 年的最后 3 位
IY ISO 年的最后 2 位
I ISO 年的最后一位
BC 或 B.C. 或 AD 或 A.D. 紀元標識(大寫)
bc 或 b.c. 或 ad 或 a.d. 紀元標識(小寫)
MONTH 全長大寫月份名(空白填充為9字符)
Month 全長混合大小寫月份名(空白填充為9字符)
month 全長小寫月份名(空白填充為9字符)
MON 大寫縮寫月份名(3字符)
Mon 縮寫混合大小寫月份名(3字符)
mon 小寫縮寫月份名(3字符)
MM 月份號(01-12)
DAY 全長大寫日期名(空白填充為9字符)
Day 全長混合大小寫日期名(空白填充為9字符)
day 全長小寫日期名(空白填充為9字符)
DY 縮寫大寫日期名(3字符)
Dy 縮寫混合大小寫日期名(3字符)
dy 縮寫小寫日期名(3字符)
DDD 一年里的日子(001-366)
DD 一個月里的日子(01-31)
D 一周里的日子(1-7;周日是1)
W 一個月里的周數(1-5)(第一周從該月第一天開始)
WW 一年里的周數(1-53)(第一周從該年的第一天開始)
IW ISO 一年里的周數(第一個星期四在第一周里)
CC 世紀(2 位)
J 儒略日(自公元前4712年1月1日來的天數)
Q 季度
RM 羅馬數字的月份(I-XII;I=JAN)(大寫)
rm 羅馬數字的月份(I-XII;I=JAN)(小寫)
TZ 時區名 (大寫)
tz 時區名 (小寫)
轉載請注明: 版權所有,文章允許轉載,但必須以鏈接方式注明源地址,否則追究法律責任!
最后編輯:2014-01-08作者:Jerry
一個積極向上的小青年,熱衷于分享--Focus on DB,BI,ETL