Oracle--计算某一日期为一年中的第几周

摘要:
2010-1-1是2010年第一周的第一天,而第一周的第1天仍然是2010-1-1 SQL˃selecttrunkfromdue;TRUNC--------------------------------------------2010-1-12010-1-6是2010年第一周的第六天,第一周的第一天是2010-1-1SQL˃selecttrunkfromtdue;TRUNC-------------------------2010-1-12010-1-9是2010年第二周的第二天,本周的第一天取为2010-1-8SQL˃selecttrunkfromdual;TRUNC--------------------------------------------2010-1-8w在功能上类似于ww,但它是基于一个月的第一天作为一周的第一天,例如,一个月第一周的第一日,以及第二周的第八天。。。也就是说,一月的参数w应该与使用trunc函数的ww结果一致。Num_ Digits是用于指定舍入精度的数字。Num_数字的默认值为0。TRUNC()函数在不舍入的情况下被直接截取。
我自己实现的脚本:

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

总结:

select to_char(TO_DATE('20110101', 'YYYYMMDD'), 'yyyyiw') as week, --oracle求当年的第几周  #常用,但是有一个问题,比如20181231是周一,但是却计算结果为201801,即2018第一周内。
       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

wwSame day of the week as the first day of the year 按年度1月1日的第一天为每周第一天
iwSame day of the week as the first day of the ISO week, which is Monday 每周一
wSame 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

免责声明:文章转载自《Oracle--计算某一日期为一年中的第几周》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Vue上传文件:ElementUI中的upload实现Springboot启动,URL正确,但是报404下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SQL如何查询连续数字并且统计连续个数

领导要求抽取一个数据,统计首次达到连续举绩12周的清单,连续举绩12周的意思是连续12周销售员都有出单。 12次出单不难判断,难点是如何判断是否是连续出单。下图是一个销售人员的出单记录,其中第24周出单2次,第26周没有出单,所以只有14周~25周是满足连续举绩的要求。 技巧:去掉举绩日期,增加一列lx(周次-行号),我们只要判断lx是否相同,相同说明是...

设计模式之外观模式(门面模式)以及如何利用到接口设计中

什么是外观模式   外观模式(Facade),他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用。  外观模式应用场景 简单来说,该模式就是把一些复杂的流程封装成一个接口供给外部用户更简单的使用。这个模式中,设计到3个角色。...

js获取7天之前的日期或者7天之后的日期

js获取7天之前的日期或者7天之后的日期(网上摘取的,记录自己使用) function fun_date(num) { var date1 = new Date(); //今天时间 var time1 = date1.getFullYear() + "-" + (date1.getMonth() + 1) + "-" + date...

fullcalendar日历控件知识点集合

1、基本的语法: 首先,fullcalendar和JQUERY一样,以面向对象的方式来组织代码。当然,这里的面向对象不过指能够把整个fullcalendar理解为一个类,这个类里包含有非常多的属性、方法、托付(函数回调)作为成员变量。通过为这些成员变量赋值,就可以实例化出一个符合自己需求的fullcalendar实例出来,即终于在浏览器里渲染出的日历。换...

mongodb 操作 Date字段类型 mongodb shell api

一,环境 php 7.2 + thinkphp 5 mongodb 3.4 二,针对Date字段的操作 mongodb shell: 写入: db.students3.insert([ { "_id" : 1, "tests" : [ 95, 92, 90 ], "lastUpdate" : ISODate("2019-01-01T00:00:00Z")...

mysql与oracle的语法对比

数据类型 编号 ORACLE MYSQL 注释 1 NUMBER int / DECIMAL DECIMAL就是NUMBER(10,2)这样的结构INT就是是NUMBER(10),表示整型;MYSQL有很多类int型,tinyint mediumint bigint等,不同的int宽度不一样 2 Varchar2(n) va...