oracle的iw算法,[转载]Oracle日期周详解IW

1 ORACLE中周相关知识描述

1.1           日期格式化函数

TO_CHAR(X [,FORMAT]):将X按FORMAT格式转换成字符串。X是一个日期,FORMAT是一个规定了X采用何种格式转换的格式字符串,FORMAT与周相关的有W,WW,IW,D,FMWW。

W的含义是一个月的第几周。是按照ORACLE自定义的标准周来返回周数。

IW是ISO标准周,它的含义是ISO标准周以周别为“主线”,每年最多可以有53个周别,但是每年至少要包含52个周别;如果一年当中第52周别之后至当年的12月31日之间,还有大于或等于4天的话,则定为当年的第53周,否则剩余这些天数被归为下一年的第1周;如果在不足52周别的话,则以下一年的时间来补;每周固定的从周一开始作为本周的第1天,到周日作为本周的第7天;比如:在Oracle中2012年01月01号依然属于IW周别2011年的第52周的第7天。这个用到的比较多。

WW是ORACLE自定义的标准周,它的含义是每年的1月1日作为当年的第一周的第一天(不管当年的1月1日是星期几);比如:2014年01年01是周三,在Oracle中被定义为2014年WW的第一周的第一天。一般很少用到。

D是返回当前日期是这个星期的第几天。是按照从周日到周六来进行计算的,这是要注意的地方。

FMWW该年1月1号(不考虑属星期几)开始至该年该一个星期日为第一周,第二周是从该年第一个星期开始算(这与IW算法相同)一年的最后一周以该年的12月31号做为截止。

1.2           日期时间运算函数

NEXT_DAY(X,Y):用于计算X时间后第一个星期Y的时间。Y是一个字符串,表示用当前会话语言表示的一周中某一天的全称(如星期一、星期二等),也可以是数值。

TRUNC(X [,FORMAT]):截断日期,FORMAT 中与周相关的有D,IW,WW,W,FMWW。

W的含义是一个月的第几周。是按照ORACLE自定义的标准周来返回的是一个周数。

IW是ISO标准周,返回是的当前日期所在周的周一。

WW是ORACLE自定义的标准周。返回ORACLE自定义标准周所在的周一。

D的含义是的返回当前星期的第一天。令人感到奇怪的是根据D返回的是当前星期的第一天是星期日。这点是我们要注意的地方。

FMWW该年1月1号(不考虑属星期几)开始至该年该一个星期日为第一周,第二周是从该年第一个星期开始算(这与IW算法相同)一年的最后一周以该年的12月31号做为截止。取周的开始时间时在跨年的时候与IW有些区别,比如2012年01年01使用FMWW的时候,周的开始时间是2012-01-01,使用IW时,周的开始时间是2011/12/26。

ROUND(X [,FORMAT]):日期的四舍五入FORMAT中与周相关的有DAY。按周一到周三和周四到周日四舍五入到最近的周日。

2 根据给定时间取一周的开始时间和结束时间

--取周的开始时间和结束时间

SELECT TRUNC(TO_DATE('2014-07-18','YYYY-MM-DD'),'IW') AS STARTDATE FROM DUAL;--本周周一

SELECT TRUNC(TO_DATE('2014-07-18','YYYY-MM-DD'),'IW') + 6 AS ENDDATE FROM DUAL;--本周周日

SELECT TRUNC(TO_DATE('2014-07-18','YYYY-MM-DD'),'IW') - 7 AS STARTDATE FROM DUAL;---上周周一

SELECT TRUNC(TO_DATE('2014-07-18','YYYY-MM-DD'),'IW') - 1 AS ENDDATE FROM DUAL;--上周周日

3 根据给定周数取一周的开始时间和结束时间

取自然周的开始时间和结束时间的难点就需要判断年初的那几天是属于本年的第一周,还是属于上一年的最后一周,根据IW自然周的定义,少于等于3天是本年的话,属于上一年的最后一周,大于等于4天属于本年的话,加上上年的最后几天,算成本年的第一周。

51f5767e4d0be88141a98a6852a32e71.gif

--按照周一到周日为一周算周的开始时间和结束时间(IW)自然周

WITH PARAMS AS (SELECT TRUNC(TO_DATE('2009-01-01','YYYY-MM-DD'),'YYYY') AS SD FROM DUAL)

SELECT LEVEL 周次,

DECODE(SIGN(5-DECODE(TO_CHAR(PM.SD,'D'),'1','7',TO_CHAR(PM.SD,'D'))),-1,

NEXT_DAY(PM.SD+(LEVEL-1)*7,2),NEXT_DAY(PM.SD+(LEVEL-1)*7-7,2))

当周第一天,

DECODE(SIGN(5-DECODE(TO_CHAR(PM.SD,'D'),'1','7',TO_CHAR(PM.SD,'D'))),-1,

NEXT_DAY(PM.SD+(LEVEL-1)*7,2),NEXT_DAY(PM.SD+(LEVEL-1)*7-7,2)) + 6

当周最后一天

FROM DUAL D

LEFT JOIN PARAMS PM ON 1=1

CONNECT BY LEVEL<=53

--按照周日到周六为一周算周的开始时间和结束时间(D)

SELECT LEVEL 周次,(TRUNC(TO_DATE('2011-01-01','YYYY-MM-DD'),'YYYY')-7) + (7-TO_CHAR(TRUNC(TO_DATE('2011-01-01','YYYY-MM-DD'),'YYYY'),'D')+1)+(LEVEL-1)*7 当周第一天,

(TRUNC(TO_DATE('2011-01-01','YYYY-MM-DD'),'YYYY')-7) + (7-TO_CHAR(TRUNC(TO_DATE('2011-01-01','YYYY-MM-DD'),'YYYY'),'D')+1)+(LEVEL-1)*7+6 当周最后一天

FROM DUAL CONNECT BY LEVEL<=53

--按照ORACLE标准(WW)

SELECT LEVEL 周次,TO_DATE('2013-01-01','YYYY-MM-DD')+(LEVEL-1)*7 当周第一天,

TO_DATE('2013-01-01','YYYY-MM-DD')+(LEVEL-1)*7+

DECODE((TO_CHAR(TO_DATE('2013-12-31','YYYY-MM-DD'),'DDD')-(LEVEL-1)*7),1,0,2,1,6) 当周最后一天

FROM DUAL CONNECT BY LEVEL<=53

90a2b54ce4e44ba6994ab3906a2fde87.gif

4 获取一年的最大周次

--获取一年中的最大周次(IW)中国日历自然周

WITH PARAMS AS (SELECT '2014' AS NF FROM DUAL)

SELECT TO_CHAR(TO_DATE(PM.NF || '-12-28','YYYY-MM-DD'),'IYYYIW') FROM DUAL LEFT JOIN PARAMS PM ON 1=1

上述SQL通过卡每年的12月28号属于哪个周,也判断一年有多少个自然周。

5  特别应该注意的地方

取周别的时候最好把年份带上,第一因为周别是相对于哪年的第几周,第二因为当使用IW的时候对于一年的开始那几天和结束那几天可能会产生一样的周数,就分不清属于哪年的第一周。

1、日期比较时精确到日,可以使用 TRUNC(sysdate,'dd')函数。

函数支持格式有:yyyy MM  dd  hh Mi

可以用 select TRUNC(sysdate,'yyyy') from dual  看看结果是什么。

不要按下面的方式比较日期:

TO_DATE(TO_CHAR(LOGTIME,'YYYY-MM-DD'), 'YYYY-MM-DD') < TO_DATE(TO_CHAR(SYSDATE - $DAYNUM$,'YYYY-MM-DD'), 'YYYY-MM-DD')

2、trunc(d1[,c1])  返回日期d1所在期间(参数c1)的第一天日期

d1日期型,c1为字符型(参数),c1默认为j(即当前日期)

c1对应的参数表:

本周星期日:day或dy或d (每周顺序:日,一,二,三,四,五,六)

本月初日期:month或mon或mm或rm

本季日期:q

本年初日期:syear或year或yyyy或yyy或yy或y(多个y表示精度)

本世纪初日期:cc或scc

【返回】:日期

select sysdate from dual --当时日期

select trunc(sysdate) from dual

select trunc(sysdate ,'DD') from dual --今天日期

select trunc(sysdate,'d')+7 from dual --本周星期日

select trunc(sysdate,'dy')+7 from dual  --本周星期日

select trunc(sysdate,'day')+7 from dual --本周星期日

select trunc(sysdate,'q') from dual--本季开始日期

select trunc(sysdate,'month') from dual --本月开始日期

select trunc(sysdate ,'mm') from dual --本月开始日期

select trunc(sysdate,'year') from dual  --本年开始日期

select trunc(sysdate ,'yyyy') from dual --本年开始日期

select trunc(sysdate ,'HH24') from dual --本小时开始时间

select trunc(sysdate ,'MI') from dual --本分钟开始时间

select trunc(sysdate ,'CC') from dual --本世纪开始时间

select trunc(LAST_DAY(sysdate),'dd') from dual --本月最后一天

3、round(10.2356,2)函数可以对数字按指定保留小数位数四舍五入,这个函数还可以对日期四舍五入

select round(sysdate,'yyyy') from dual 四舍五入到年

select round(sysdate,'mm') from dual 四舍五入到月

select round(sysdate,'dd') from dual 四舍五入到日

select round(sysdate,'hh') from dual 四舍五入到小时

select round(sysdate,'mi') from dual 四舍五入到分钟

4、TRUNC还可以对number类型使用,

TRUNC(89.985,2)=89.98

TRUNC(89.985)=89

TRUNC(89.985,-1)=80

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/399015.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在 ASP.NET MVC 3 中应用 KindEditor

http://www.cnblogs.com/weicong/archive/2012/03/31/2427608.html 第一步 将 KindEditor 的源文件添加到项目中&#xff0c;建议放到 /Scripts/kindeditor 目录中&#xff0c;其中只需要有 lang目录、plugis目录、themes目录和kindeditor-min.js文件即可。 第二步 在 /Views/S…

浅谈https(创建、传输、断开)

前言 比起http&#xff0c;https是更安全的&#xff0c;传输过程中加密的。但是具体的加密过程是怎么样我一直一知半解。花了点时间抓包简单分析了一下&#xff0c;希望对大家有用。 在windows平台下抓tcp包是用wireshark的了。没啥好说的。   我们平常的一次https 的请求&am…

oracle 还原dmp时_报错的值太大,基于oracle数据库的CLOUD备份恢复测试

CLOUD oracle数据库备份恢复测试强烈建议使用expdp/impdp&#xff0c;因为&#xff1a;在expdp的时候Oracle不会再依赖和参考NLS_LANG的设置&#xff0c;而是完全按照数据库本身的字符集导出数据&#xff0c;impdp的时候&#xff0c;Oracle会自动判断如果dmp文件中的字符集和目…

Servlet读取文件的最好的方式

在java web 开发的时候不可避免的会读取文本信息&#xff0c;但是方式不同&#xff0c;所付出的代价也是不一样的&#xff0c;今天学到了一个比较好的实用性的技巧&#xff0c;拿来与大家分享一下。 读取属性配置文件 之所以说成是读取属性&#xff08;properties)文件&#xf…

Bootstrap 排版

2019独角兽企业重金招聘Python工程师标准>>> Bootstrap 使用 Helvetica Neue、 Helvetica、 Arial 和 sans-serif 作为其默认的字体栈。 使用 Bootstrap 的排版特性&#xff0c;您可以创建标题、段落、列表及其他内联元素。 标题 Bootstrap 中定义了所有的 HTML 标题…

php读取子目录下文件内容,php小代码----目录下读取子文件或子目录_PHP教程

php小代码----目录下读取子文件或子目录rootPath $rootPath;if (is_dir($this->rootPath)) {$this->rootPath pathinfo($this->rootPath, PATHINFO_DIRNAME) . DIRECTORY_SEPARATOR . pathinfo($this->rootPath, PATHINFO_BASENAME);$this->opDirectory dir(…

博客园自动显示随笔标签

title: 博客园自动显示随笔标签 date: 2018-01-03 20:52:22 tags: 浏览器脚本 categories: 前端 在添加随笔页自动显示已有标签&#xff0c;不用点击插入已有标签 效果如图 安装链接https://greasyfork.org/zh-CN/scripts/36809-%E5%8D%9A%E5%AE%A2%E5%9B%AD%E6%98%BE%E7%A4%BA…

linux 进程代码,怎样从Linux终端管理进程:10个你必须知道的命令

Linux终端有一系列有用的命令。它们可以显示正在运行的进程、杀死进程和改变进程的优先级。本文列举了一些经典传统的命令和一些有用新颖的命令。本文提到的命令会实现某个单一功能。它们可以结合起来——这也是Unix设计程序的理念。其它命令&#xff0c;例如htop,会在命令的上…

pycharm 安装 tensorflow

1. 安装python 3.5 链接&#xff1a;https://www.python.org/downloads/release/python-352/ 1.1如果之前安装了其他版本的&#xff0c;可以在你需要的项目中&#xff0c;导入本地需要的解释器 如果遇到安装包不知道安装位置&#xff0c;在C盘中搜索&#xff0c;然后将python3…

linux vnc 改端口号,RHEL6下配置vncserver服务(包括修改vnc端口)

RHEL6下配置vncserver服务(包括修改vnc端口)(2012-04-13 23:36:07)标签&#xff1a;it配置完vsftpd后&#xff0c;还必须要开的服务就是vnc啦&#xff0c;首先&#xff0c;在root用户下利用yum源安装vncserver:yum list | grep vncyum install tigervnc-server.i686安装完成后&…

简单Linq笔记

Linq是.net 3.5才引入的 要引入命名空间System.Linq. Linq to XML要引入System.Xml.Linq Linq to ADO.NET要引入System.Data.Linq 每个Linq查询都是以from子句开始,Linq查询中,select子句和select子句都是必备子句.Linq查询表达式 必须以select或group子句结束 from字句包括两…

Groovy在Spring中的简单使用实例

2019独角兽企业重金招聘Python工程师标准>>> 步骤一&#xff1a; 如果你使用的是Eclipse,则需先添加groovy插件&#xff0c;以便操作groovy文件。 可参&#xff1a;http://blog.csdn.net/haigenwong/article/details/22947075 步骤二&#xff1a; 步骤三&#xff1a…

.net core 2.0学习记录(一):搭建一个.Net Core网站项目

.Net Core开发可以使用Visual Studio 2017或者Visual Studio Code,下面使用Visual Studio 2017搭建一个.net Core MVC网站项目。 一.新建项目 二.选择 Web应用程序(模型视图控制器) 三.项目结构和之前的比对还是有很大的不同,wwwroot用来存放前端的一些静态资源(css/js/image/h…

一个APP的由来

之前在站酷、UI中国、优设等网站看过不少的APP教程、规范等一些东西。自认为有些规范讲的内容过于繁琐&#xff0c;对于像我这样的大多数设计师来说看着看着就懵逼了.... 如何联系我&#xff1a;【万里虎】www.bravetiger.cn 【QQ】3396726884 &#xff08;咨询问题100元起&…

linux qt 添加.so,Linux环境下qt/qt creator添加OpenCV的配置

第一次使用qtcreator&#xff0c;我是做图像处理的&#xff0c;想在Ubuntu下将qtcreator和opencv的环境配置起来&#xff0c;着资料和尝试配置&#xff0c;耗费了我一个上午和一个下午&#xff0c;终于最终摸出了门路&#xff0c;以供大家分享。第一步&#xff1a;下载和安装op…

Auto Layout 和 Constraints

文章修改 2月1日&#xff1a;添加使用约束、编辑约束和iOS特性三个部分2月24日&#xff1a;根据自己的理解&#xff0c;修改iOS特性部分的内容 自动布局Auto Layout Auto Layout&#xff0c;通过设置在View上的约束&#xff0c;动态计算视图层次结构中所有的View的尺寸和位置。…

tkinter的GUI设计:界面与逻辑分离(三)-- 多页面

知识点&#xff1a; 使用 tkinter.Frame.tkraise() 函数去提升当前 tkinter.Frame 的 z 轴顺序&#xff0c;使得多个 tkinter.Frame 的可见性得以切换 本文基于&#xff1a;win7 python34 1 2 3 4 5 import matplotlib matplotlib.use("TkAgg")from matplotlib.back…

Android源码解析--SwipeMenuListView仿QQ聊天左滑

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/50612714 绪论&#xff1a; 好久没写博客了&#xff0c;最近比较懒&#xff0c;不想写博客&#xff0c;但是在看书&#xff0c;看一些Android进阶的书&#…

java main方法背后的故事?(转)

jvm java 看似一种语言&#xff0c;实则一个巨大的体系的王国&#xff0c;开发这么多年了&#xff0c;还是没有搞懂,我以为我懂了&#xff0c;可是过了一段时间又忘了&#xff0c;所以说还是没懂 1、main方法说起 编译完我们的java文件后&#xff0c;需要有个一含有main方法的类…

亲历腾讯WEB前端开发三轮面试经历及面试题

【一面】~110分钟 2014/09/24 11:20 星期三 进门静坐30分钟做题。 填空题大题问答题 >>填空题何时接触电脑 何时接触前端运算符 字符串处理 延时 display position XMLHttpRequest 正则Jquery绑定事件 cookie >>大题BOM浏览器…