Oracle查询当前日期对应周数

时间:2024-03-17 08:12:18

在Oracle中查询当前日期对应的SQL

oracle常见的日期格式有Date & Timestamp
其中Data常用的格式为:YYYY-MM-DD HH24-MI-SS
其中Timestamp常用的格式为:YYYY-MM-DD HH24-MI-SS.FFF

上述两种日期格式最明显的差异为TimeStamp格式更精确(精确至秒后三位小数)

回到标题,如何将当前日志转换为周数
常见的用法为 TO_CHAR(XXX,[type])
常用的type有

  • W 按照Oracle的标准周来返回周数,表示:为当前月份的第几周
  • WW
  • IW
  • D
  • FMWW

截取2019年3月的日期
Oracle查询当前日期对应周数用法演示---------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月份的第四周)
Oracle查询当前日期对应周数
当选择的日期为2019-04-04日时,对应的结果仍为
Oracle查询当前日期对应周数
注意:从上面的举例可以看出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;

Oracle查询当前日期对应周数

再以2019-03-05为例(注意,3月5日未星期二)

SELECT TO_Char (to_date('2019-03-05','YYYY-MM-DD'), 'YY-MM-WW') AS WeekNo FROM DUAL;

Oracle查询当前日期对应周数
注意,已经变成了第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;

Oracle查询当前日期对应周数

再取2019-03-04

SELECT TO_Char (to_date('2019-03-04','YYYY-MM-DD'), 'YY-MM-IW') AS WeekNo FROM DUAL;

Oracle查询当前日期对应周数

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;

Oracle查询当前日期对应周数
用法演示---------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查询当前日期对应周数

以上为个人所理解的Oracle中常用的周数计算