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天属于本年的话,加上上年的最后几天,算成本年的第一周。

--依照周一到周日为一周算周的開始时间和结束时间(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

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号属于哪个周,也推断一年有多少个自然周。


 特别应该注意的地方

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

Oracle日期周具体解释以及周開始结束时间计算的更多相关文章

  1. 转:Oracle日期周详解以及周开始结束时间计算

    目录(?)[-] ORACLE中周相关知识描述 日期格式化函数 日期时间运算函数 根据给定时间取一周的开始时间和结束时间 根据给定周数取一周的开始时间和结束时间 获取一年的最大周次 特别应该注意的地方 ...

  2. Oracle日期查询:季度、月份、星期等时间信息

    --oracle有关时间信息 Select to_char(sysdate,'Q') from dual;--指定日期的季度 Select to_char(sysdate,'MM') from dua ...

  3. java根据开始时间结束时间计算中间间隔日期

    public static void main(String[] args) throws Exception { String beginDate = "2016-07-16"; ...

  4. 開始折腾cocos2d-x,使用批处理来创建项目

    開始抽出时间学习cocos2d-x了.尽管C和C++还都不咋地.只是在开发中学习记忆也许会更深吧. so决定从今天開始正式学习的用自己的空暇时间折腾它了.正好这个五一没什么事.昨天搭建了一下开发环境. ...

  5. ORACLE取周、月、季、年的開始时间和结束时间

     1           取周的開始时间和结束时间 取周的開始时间.以星期一为開始. SQL>SELECT TRUNC(TO_DATE('2013-11-25 10:31:11','YYYY ...

  6. js 获取每月有几周,根据年月周获取该周从周一到周日的日期等方法

    本文基于react-native 本人在用react-native写一个关于课程表的APP时需要课程表按照日期周期显示,网上查了许多方法,都没有达到自己想要的效果,根据一些方法的参考,再根据自己思维写 ...

  7. sql 中,如何获取两个日期之前月数、周数、天数

    1.获取两个日期之间的月数.周数.天数语法 --1.获取两个日期之间的月数.周数.天数 --1.1)声明参数 ) ) --1.2)获取两个日期直接的月数 select DATEDIFF(MM,@sta ...

  8. PHP获取日期对应星期、一周日期、星期开始与结束日期的方法

    本文实例讲述了PHP获取日期对应星期.一周日期.星期开始与结束日期的方法.分享给大家供大家参考,具体如下: /* * 获取日期对应的星期 * 参数$date为输入的日期数据,格式如:2018-6-22 ...

  9. antdv时间选择a-date-picker设置日期可选范围(近一周、近半月、近一月等) - moment.js

    Vue->Template: <a-date-picker v-model="value" :disabled-date="disabledDate" ...

随机推荐

  1. 洛谷P2147 [SDOI2008] 洞穴勘探 [LCT]

    题目传送门 洞穴勘探 题目描述 辉辉热衷于洞穴勘测. 某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道 ...

  2. java 简单类

    package 面向对象编程_封装性; //1.类名称必须存在有意义,例如Book.Emp //2.类之中所有的属性必须用private封装,封装后的属性必须提供有setter和getter方法 // ...

  3. 【atcoder F - Namori】**

    F- Namori http://agc004.contest.atcoder.jp/tasks/agc004_f Time limit : 2sec / Memory limit : 256MB S ...

  4. Tomcat+Apache集群方案

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha # environment slash for Windows(反斜杠代表Windows ...

  5. [BZOJ4892][TJOI2017]DNA(后缀数组)

    题目描述 加里敦大学的生物研究所,发现了决定人喜不喜欢吃藕的基因序列S,有这个序列的碱基序列就会表现出喜欢吃藕的性状,但是研究人员发现对碱基序列S,任意修改其中不超过3个碱基,依然能够表现出吃藕的性状 ...

  6. 【刷水-二分答案】BZOJ1650 & BZOJ1639

    BZOJ1650-[Usaco2006 Dec]River Hopscotch 跳石子 [题目大意] 数轴上有n个石子,第i个石头的坐标为Di,现在要从0跳到L,每次条都从一个石子跳到相邻的下一个石子 ...

  7. Ubuntu 无线驱动问题

    最近一次更新系统后开机发现电脑只能连有线网络连不上无线网络.我平时都是连无线网络,没有买网线.所以查了下无线驱动相关问题资料,发现是由于更新系统造成无线网卡驱动莫名不见了.刚开始还以为是电脑将无线禁用 ...

  8. ZOJ 3687 The Review Plan I 容斥原理

    一道纯粹的容斥原理题!!不过有一个trick,就是会出现重复的,害我WA了几次!! 代码: #include<iostream> #include<cstdio> #inclu ...

  9. VS2010安装HTML5插件

    步骤: 1. 下载 插件 2.拷贝文件里面德尔html_5.xsd到 D:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Packa ...

  10. 用C++/CLI搭建C++和C#之间的桥梁(四)—— 网络资源

    关于C++/CLI的基础,我前面已经写过了几篇文章介绍过一些了,不过这些基本上都是管中窥豹,如果要详细了解C++/CLI,MSDN无疑是最好的教程. 使用 C++ 互操作(隐式 PInvoke) Vi ...