oracle常见的日期格式有Date & Timestamp
其中Data常用的格式为:YYYY-MM-DD HH24-MI-SS
其中Timestamp常用的格式为:YYYY-MM-DD HH24-MI-SS.FFF
上述两种日期格式最明显的差异为TimeStamp格式更精确(精确至秒后三位小数)
回到标题,如何将当前日志转换为周数
常见的用法为 TO_CHAR(XXX,[type])
常用的type有
截取2019年3月的日期
用法演示---------W
当选择的日期为2019-03-1日
SELECT TO_Char (to_date('2019-03-01','YYYY-MM-DD'), 'YY-MM-W') AS WeekNo FROM DUAL;
对应 Query结果为:19-03-1(表示2019年4月28日为2019年4月份的第四周)
当选择的日期为2019-04-04日时,对应的结果仍为
注意:从上面的举例可以看出W的实际含义为只针对一个月的时间来看
用法演示---------IW
以2019-03-04日为例(注意,3月4日为星期一)
SELECT TO_Char (to_date('2019-03-04','YYYY-MM-DD'), 'YY-MM-WW') AS WeekNo FROM DUAL;
再以2019-03-05为例(注意,3月5日未星期二)
SELECT TO_Char (to_date('2019-03-05','YYYY-MM-DD'), 'YY-MM-WW') AS WeekNo FROM DUAL;
注意,已经变成了第10周
原因:WW采用的Oracle默认的标准周的计算方式,该标准周的统计逻辑为:每周二当前一周的开始,下周周一当作当前周的最后一天
用法演示---------WW
先以2019-03-03为例
SELECT TO_Char (to_date('2019-03-03','YYYY-MM-DD'), 'YY-MM-IW') AS WeekNo FROM DUAL;
再取2019-03-04
SELECT TO_Char (to_date('2019-03-04','YYYY-MM-DD'), 'YY-MM-IW') AS WeekNo FROM DUAL;
IW即表示ISO标准周,及我们大众通常认知中的周一开始,到周日结束,算作一周
用法演示---------D
该用法并不常见,也简单说明下
返回是当前日期为该周的第几天,周数的计算逻辑为周日开始,记为1,到周六结束,记为7,一直循环
取03-05日
SELECT TO_Char (to_date('2019-03-05','YYYY-MM-DD'), 'YY-MM-D') AS WeekNo FROM DUAL;
用法演示---------FMWW
该用法也并不常有,简单说明下,周数的计算逻辑为
从1月1日开始,每隔7天算一周 ,及1/1~1/7为第一周,1/8-1/14为第二周,依次类推
例如2019年第一个星期日为01-06日
SELECT TO_Char (to_date('2019-01-07','YYYY-MM-DD'), 'YY-MM-FMWW') AS WeekNo FROM DUAL;
以上为个人所理解的Oracle中常用的周数计算