`
312350968
  • 浏览: 212136 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Oracle日期相关

 
阅读更多

Oracle中日期的表示:

select to_char(sysdate,'CC WW W D DDD YYYY/MM/DD year month day') FROM DUAL
其中
CC    为世紀
WW 为一年中的周
W      为一個月中的周
D       为星期几
DDD 为一年中的第几天
year   为年 
month 为月 
day      为星期几

SQL>   select to_char(sysdate,'day') from dual; 

IW,WW的区别

IW:ISO标准周
WW:oracle标准周
举例:
SELECT to_char(to_date('20051203','yyyymmdd'),'WW') "WW03",
       to_char(to_date('20051203','yyyymmdd'),'IW') "IW03",
       to_char(to_date('20051204','yyyymmdd'),'WW') "WW04",
       to_char(to_date('20051204','yyyymmdd'),'IW') "WW04",
       to_char(to_date('20051205','yyyymmdd'),'WW') "WW05",
       to_char(to_date('20051205','yyyymmdd'),'IW') "WW05"
FROM dual; 

Oracle中发现的WW和IW的规律
WW:
     每年的1月1日作为当年的第一周的第一天(不管当年的1月1日是星期几);
     比如:2004/01/01 是周四, 在Oracle中被定义为2004年WW的第一周的第一天;
     SELECT TO_CHAR(TO_DATE('20040101','YYYYMMDD'),'YY:WW'),TO_CHAR(TO_DATE('20040107','YYYYMMDD'),'YY:WW'),TO_CHAR(TO_DATE('20040108','YYYYMMDD'),'YY:WW') FROM DUAL;

IW :
    以周别为“主线” ,每年最多可以有53个周B别,但是每年至少要包含52个周别;
如果一年当中第52周别之后至当年的12月31日之间,还有大于或等于4天的话,则定为当年的第53周,否则剩余这些天数被归为下一年的第1周;如果在不足52周别的话,则以下一年的时间来补;每周固定的从周一开始作为本周的第1天,到周日作为本周的第7天;比如:在Oracle中 2006/01/01 依然属于IW周别 05年的第52周的第7天
SELECT TO_CHAR(TO_DATE('20051226','YYYYMMDD'),'IY:IW'),TO_CHAR(TO_DATE('20060101','YYYYMMDD'),'IY:IW') FROM DUAL;

 

关于Oracle to_char()函数中的IW,WW 周别显示 

=========================================================== 

作者: tolywang(http://tolywang.itpub.net)
发表于:2008.03.24 09:49
分类: Oracle数据库管理 
出处:http://tolywang.itpub.net/post/48/458073
--------------------------------------------------------------- 

查今天是 "今年的第几周 

  select to_char(sysdate,'ww') from dual; 

  或 

  select to_char(sysdate,'iw') from dual; 

  附注: 

上文所提之iwww格式在doc内解释如下 

  IW = Week of year (1-52 or 1-53) based on the ISO standard 

  WW = Week of year (1-53) where week 1 starts on the first day of the year and continues to the seventh day of the year. 

 

周日都是第12

select to_char(to_date('20080323','yyyymmdd'),'WW') from dual;

select to_char(to_date('20080323','yyyymmdd'),'IW') from dual; 

周一其中一个是 12 周,一个是第 13 周 。 按照中国习惯应该式 IW (ISO Standard Week ) 比较合适 。 

select to_char(to_date('20080324','yyyymmdd'),'WW') from dual;

select to_char(to_date('20080324','yyyymmdd'),'IW') from dual; 

tolywang 发表于:2008.03.24 09:49 ::分类: ( Oracle数据库管理 ) ::阅读:(2468) :: 评论 (2) :: 引用 (0) 

re: 关于Oracle to_char()函数中的IW,WW 周别显示 [回复

详细讲解Oracle数据库的周数计算” 

1、日期计算,算第n周的第一天及最后一天是几号。 

  1ww的算法为每年11日为第一周开始,date+6为每一周结尾 

  例如20050101为第一周的第一天,而第一周的最后一天为20050101+6=20050107 

  公式 每周第一天 :date + 周 * 7 - 7 

  每周最后一天:date + 周 * 7 - 1 

  你会发现怎么编排格式都会跑掉。 

  2、日期计算,算第n周的第一天及最后一天是几号。 1ww的算法为每年11日为第一周开始,date+6为每一周结尾 

  例如20050101为第一周的第一天,而第一周的最后一天为20050101+6=20050107 

  公式 每周第一天 :date + 周 * 7 - 7 

  每周最后一天:date + 周 * 7 - 1 

  如果以ww格式为主,第117周的起迄如下 

  127.0.0.1:asdb:WF>select to_date('20050101','yyyymmdd') + 1*7-7,to_date('20050101','yyyymmdd') + 1*7-1 from dual; 

  TO_DATE(' TO_DATE(' 

  01-JAN-05 07-JAN-05 

  127.0.0.1:asdb:WF>select to_date('20050101','yyyymmdd') + 17*7-7,to_date('20050101','yyyymmdd') + 17*7-1 from dual; 

  TO_DATE(' TO_DATE(' 

  23-APR-05 29-APR-05 

  Elapsed: 00:00:00.00 

  验证如下 

  127.0.0.1:asdb:WF>select to_char(to_date('20050422','yyyymmdd'),'ww') as weekn,to_char(to_date('20050423','yyyymmdd'),'ww') as week1,to_char(to_date('20050429','yyyymmdd'),'ww') as week2,to_char(to_date('20050430','yyyymmdd'),'ww') as weekn2 from dual; 

  WEEK WEEK WEEK WEEK 

  16 17 17 18 

  Elapsed: 00:00:00.00 

  127.0.0.1:asdb:WF> 

2iw的算法为星期一至星期日算一周,且每年的第一个星期一为第一周, 

   例如20050101为星期六,所以用iw的算法是前年的53周,而20050103之后才是第一周的开始。 

  公式 每周第一天 :next_day(date) + 周 * 7 - 7 

  每周最后一天:next_day(date) + 周 * 7 - 1 

  如果以iw格式为主,第117周的起迄如下 

  127.0.0.1:asdb:WF>select next_day(to_date('20050101','yyyymmdd'),'MONDAY')+ 1 * 7 - 7 as first_day,next_day(to_date('20050101','yyyymmdd'),'MONDAY')+ 1 * 7 - 1 as last_day from dual; 

  FIRST_DAY LAST_DAY 

  03-JAN-05 09-JAN-05 

  Elapsed: 00:00:00.00 

  127.0.0.1:asdb:WF> 

  127.0.0.1:asdb:WF>select next_day(to_date('20050101','yyyymmdd'),'MONDAY')+ 17 * 7 - 7 as first_day,next_day(to_date('20050101','yyyymmdd'),'MONDAY')+ 17 * 7 - 1 as last_day from dual; 

  FIRST_DAY LAST_DAY 

  25-APR-05 01-MAY-05 

  Elapsed: 00:00:00.00 

  127.0.0.1:asdb:WF> 

  验证如下 

  127.0.0.1:asdb:WF>select to_char(to_date('20050424','yyyymmdd'),'iw') as weekn,to_char(to_date('20050425','yyyymmdd'),'iw') as week1,to_char(to_date('20050501','yyyymmdd'),'iw') as week2,to_char(to_date('20050502','yyyymmdd'),'iw') as weekn2 from dual; 

  WEEK WEEK WEEK WEEK 

  ---- ---- ---- ---- 

  16 17 17 18 

  Elapsed: 00:00:00.00 

  3)其它: 

  A、查今天是 "本月的第几周 

  SELECT TO_CHAR(SYSDATE,'WW') - TO_CHAR(TRUNC(SYSDATE,'MM'),'WW') + 1 AS "weekOfMon" from dual; 

  或 

  SELECT TO_CHAR(SYSDATE,'W') AS "weekOfMon" from dual; 

  B、查今天是 "今年的第几周 

  select to_char(sysdate,'ww') from dual; 

  或 

  select to_char(sysdate,'iw') from dual; 

  附注: 

  上文所提之iwww格式在doc内解释如下 

  IW = Week of year (1-52 or 1-53) based on the ISO standard 

  WW = Week of year (1-53) where week 1 starts on the first day of the year and continues to the seventh day of the year.

tolywang 评论于:2008.03.24 10:02 

re: 关于Oracle to_char()函数中的IW,WW 周别显示 [回复

SQL> select to_char(to_date('2009-01-01','yyyy-MM-dd'),'iw') from dual;

TO_CHAR(TO_DATE('2009-01-01','
------------------------------
01
2009-01-012009年第一周,是星期四,如果按你给的IW 计算一周第一天,和最后一天来计算本年的第二周的第一天和最后一天,就相差一周
SQL> select to_char(next_day(to_date('2009-01-01','yyyy-MM-dd'),'星期一')+2*7-7,'yyyy-MM-dd') as firstDay,to_char(next_day(to_date('2009-01-01','yyyy-MM-dd'),'星期一')+2*7-1,'yyyy-MM-dd') as lastDay from dual;

FIRSTDAY LASTDAY
---------- ----------
2009-01-12 2009-01-18

SQL> select to_char(to_date('2009-01-12','yyyy-MM-dd'),'iw') from dual;

TO_CHAR(TO_DATE('2009-01-12','
------------------------------
03


随便介绍几个其它函数的用法: 
如获得完整的时间格式 
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

本月的天数 
SELECT to_char(last_day(SYSDATE),'dd') days FROM dual 
今年的天数 
select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual 
下个星期一的日期 
SELECT Next_day(SYSDATE,'monday') FROM dual

分享到:
评论

相关推荐

    oracle日期查询相关

    ### Oracle日期查询相关知识点 #### 一、获取系统当前日期与时间 在Oracle数据库中,可以通过`SYSDATE`函数来获取系统的当前日期和时间。这是一个非常实用的功能,尤其是在需要记录数据的操作时间点时。 **示例:...

    oracle_日期_加减方法

    在Oracle数据库中,日期操作是常见的SQL查询任务,特别是在处理历史数据或进行时间相关的分析时。Oracle提供了丰富的函数来帮助用户对日期进行加减操作,这些功能强大且灵活的函数使得开发者能更精确地处理时间数据...

    oracle日期及时间格式

    Oracle 日期及时间格式是 Oracle 编程语言中一个重要的组成部分,了解 Oracle 日期及时间格式可以帮助开发者更好地处理日期及时间相关的操作。在 Oracle 中,日期及时间格式可以通过使用 TO_CHAR 函数来实现,该函数...

    Oracle日期函数练习

    Oracle 日期函数是 Oracle 数据库中的一组功能强大且广泛使用的函数,它们可以对日期进行各种操作和计算,本次练习涵盖了 Oracle 中常用的日期函数,包括获取当前系统时间、对日期的月进行加减、获取给定日期所在月...

    oracle日期处理全集

    以下是对给定文件中提及的Oracle日期处理函数的详细说明: 1. **add_months(d, n)**: 此函数将日期d加上n个月,返回新的日期。例如,`add_months(SYSDATE,1)`会返回当前日期往后一个月的日期。 2. **last_day(d)**...

    oracle日期处理完全版

    Oracle数据库在日期处理方面提供了丰富的函数和操作方式,使得对日期和时间的管理变得非常灵活。以下是对标题和描述中提到的知识点的详细说明: 1. **日期和字符转换**: - `to_date` 函数用于将字符型数据转换为...

    oracle日期时间判断函数

    针对标题"oracle日期时间判断函数"和描述中提到的内容,我们可以深入探讨两个关键的函数,它们主要用于判断字符串是否可以转换为合法的日期时间格式。 1. TO_DATE函数: TO_DATE是Oracle中用于将字符串转换为日期...

    oracle自定义日期函数

    Oracle 日期处理函数是数据库管理系统中非常重要的一部分,最近看到有人在做 T-SQL 与 PL/SQL 的转化,问了些有关时间函数的处理。在 PL/SQL 中,Oracle 提供了其他的方法来处理日期函数,例如 DATE_ADD 函数。在 T-...

    oracle日期操作举例

    ### Oracle 日期操作详解 #### 一、日期时间间隔操作 在Oracle数据库中,我们可以方便地执行日期时间的间隔操作,比如对当前时间进行增减指定的时间间隔。 **1. 当前时间减去7分钟的时间** ```sql SELECT SYSDATE...

    Oracle日期型数据格式

    ### Oracle日期型数据格式 在Oracle数据库中,日期型数据是一种非常重要的数据类型,用于存储日期和时间信息。为了确保数据的一致性和可读性,Oracle提供了多种方式来定义和处理日期格式。本文将深入探讨Oracle中的...

    oracle设置日期格式

    在开始之前,我们先来了解一些关于Oracle日期格式的基础知识: 1. **NLS_DATE_FORMAT**:这是一个非常重要的环境变量,用于控制日期在查询结果中的显示格式。 2. **日期格式字符串**:由一系列字符组成,用来定义...

    Oracle 验证是否是日期

    ### Oracle 验证是否是日期 在Oracle数据库中,经常需要对输入的数据进行格式校验,尤其是日期格式的校验尤为重要。本文将详细介绍一个自定义的Oracle函数`FN_ISDATE_JAVA`,该函数用于判断给定的字符串是否能够...

    在oracle中处理日期大全

    Oracle 中日期处理大全 在 Oracle 中,日期处理是数据库管理系统中一个非常重要的方面。处理日期信息需要精准和细致,否则可能会出现错误的结果。在本节中,我们将详细介绍 Oracle 中日期处理的各种方法和函数。 ...

    Oracle时间日期操作

    Oracle 时间日期操作 Oracle 时间日期操作是 Oracle 数据库中的一种常用的操作类型,它可以对数据库中的日期和时间进行各种处理和计算。以下是 Oracle 时间日期操作的一些常见知识点: 1. 获取当前日期和时间:...

    oracle 日期处理 总结

    以下是对Oracle日期处理的一些关键知识点的详细说明: 1. **将时间字符串转换为时间** Oracle提供了`to_date()`函数将字符串转换为日期类型。这个函数需要两个参数:要转换的字符串和匹配的转换格式。例如,`to_...

    oracle判断日期是否合法

    oracle判断日期是否合法

    ORACLE日期时间函数大全

    ORACLE日期时间函数大全

    ORACLE常用日期函数集合

    ### ORACLE常用日期函数...以上介绍的Oracle日期函数是数据库开发和管理中非常实用的一部分,通过灵活地运用这些函数,可以有效地解决各种与日期相关的数据处理问题。希望本文能够帮助读者更好地掌握和应用这些函数。

    Oracle中的日期处理总结

    ### Oracle中的日期处理总结 #### 一、获取当前日期与时间 在Oracle数据库中,我们可以通过多种方式来获取系统的当前日期或时间。...以上就是关于Oracle中日期处理的相关知识点总结,希望对你有所帮助。

Global site tag (gtag.js) - Google Analytics