一、日期格式及表示的含义:
          yyyy:四位数的年份
          rrrr:四位数的年份
          yy:两位数的年份
          rr:两位数的年份
          mm:两位数的月份(数字)
          D:一周的星期几
          DD:一月的第几天
          DDD :一年的第几天
          YEAR:英文的年份
          MONTH:英文全称的月份
          mon:英文简写的月份
          ddsp:英文的第几天(一个月的)
          ddspth:英文序列数的第几天(一个月的)
          DAY:全英文的星期
          DY:简写的英文星期
          hh:小时
          mi:分钟
          ss:秒
 二、千年虫问题(参见: 千年虫问题的发现者及相关)
      千年虫:
        在早期的计算机的程序中规定了的年份仅用两位数来表示。也就是说,假如是1971年,在计算机里就会被表示为71,但是到了2000年的时候这个情况就出现了问题,计算机就会将其年份表示为00。这样的话计算机内部对年份的计算就会出现问题。这个事情当时被称为千年虫     
        数据库中表示日期中年份的有俩种: yy和rr
        之前一直使用的是yy格式,后来才有的rr格式
        yy表示使用一个俩位数表示当前年份:
        1990 ---yy数据库格式---> 90
        1968 ---yy数据库格式---> 68
        1979 ---yy数据库格式---> 79

rr格式表示: 另外参照图片:rr日期格式规则.png

如果日期中的年份采用的格式为rr,并且只提供了最后2位年份,那么年份中的前两位数字就由两部分共同确定:提供年份的两位数字(指定年),数据库服务器上当前日期中年份的后2位数字(当年)。

确定指定年所在世纪的规则如下:
        规则1 如果指定年在00~49之间,并且当前年份在00~49之间,那么指定年的世纪就与当前年份的世纪相同。因此,指定年的前两位数字就等于当前年份的前两位数字。例如,如果指定年为15,而当前年份为2007,那么指定年就是2015。
        规则2 如果指定年在50~99之间,并且当前年份在00~49之间,那么指定年的世纪就等于当前年份的世纪减去1。因此,指定年的前两位数字等于当前年份的前两位数字减去1。例如,如果指定年为75,而当前年份为2007,那么指定年就是1975。
        规则3 如果指定年在00~49之间,并且当前年份在50~99之间,那么指定年的世纪就等于当前年份的世纪加上1。因此,指定年的前两位数字等于当前年份的前两位数字加上1。例如,如果指定年为15,而当前年份为2075,那么指定年就是2115。

规则4 如果指定年在50~99之间,并且当前年份在50~99之间,那么指定年的世纪就与当前年份的世纪相同。因此,指定年的前两位数字就等于当前年份的前两位数字。例如,如果指定年为55,而当前年份为2075,那么指定年就是2055。

如下所示,日期中的年份采用的格式为rr,并且只提供了最后2位年份

 select to_char(to_date('25-may-12','dd-month-rr'),'yyyy-mm-dd') from dual;

如上图所示,由于指定的两位数字为12,当前年份的后两位数字位16(今年是2016年),所以指定年属于0-49的范围,而当前年也属于0-49的情况,所以属于规则1,这时数据库就以规则1的形式存储指定年的年份为2012,故当我们使用四个年份长度的‘yyyy’读取时,便显示2012     

 select to_char(to_date('25-may-72','dd-month-rr'),'yyyy-mm-dd') from dual;

如上图所示,由于指定的两位数字为72,当前年份的后两位数字位16(今年是2016年),所以指定年72属于50-99的范围,而当前年16属于0-49的情况,所以属于规则2,这时数据库就以规则2的形式存储指定年(此时的指定世纪为当时世纪减1,即19)的年份为1972,故当我们使用四个年份长度的‘yyyy’读取时,便显示1972

如下面所示,我把我的系统时间手动更改为2076年9月20日,由于我的是本地oracle数据库,所以 数据库的本地时间也会跟随系统变化       

select to_char(to_date('25-may-72','dd-month-rr'),'yyyy-mm-dd') from dual;

如上图所示,由于指定的两位数字为72,当前年份的后两位数字为76(即oracle获取的本地时间(当前时间)是2076年),所以指定年72属于50-99的范围,而当前年76也属于50-99的情况,所以属于规则4,这时数据库就以规则4的形式存储指定年(此时的指定世纪为当前世纪,即20)的年份为2072,故当我们使用四个年份长度的‘yyyy’读取时,便显示2072

select to_char(to_date('25-may-12','dd-month-rr'),'yyyy-mm-dd') from dual;


如上图所示,由于指定的两位数字为12,当前年份的后两位数字为76(即oracle获取的本地时间(当前时间)是2076年),所以指定年12属于0-49的范围,而当前年76属于50-99的情况,所以属于规则3,这时数据库就以规则3的形式存储指定年的年份为2172(此时的指定世纪为当前世纪+1,即21),故当我们使用四个年份长度的‘yyyy’读取时,便显示2112

三、oracle数据库中表示一个日期数据的几种方式

1.使用sysdate,表示当前日期
      2.使用oracle默认的日期格式 例如:'25-MAY-95'
      3.使用日期函数ADD_MONTHS/NEXT_DAY/LAST_DAY/ROUND/TRUNC
      4.使用转换函数to_date,使用是注意格式

select语句(4)--Oracle中的日期格式及千年虫问题相关推荐

  1. c oracle格式化时间,JAVA和ORACLE中的日期格式

    报表中同时用到了从JAVA中取得的日期和从ORACLE中取得的日期,日期格式必须统一. 1.JAVA中,我用SimpleDateFormat()格式化日期,语法如下: SimpleDateFormat ...

  2. ORACLE中查询日期格式

    原始格式: select Starttime,Endtime from ELEARNING.Opt_Training where Orgid = '6c457da0-7825-4df7-bcd7-0e ...

  3. dorado 中的日期--》oracle中的日期

    一.在类中得到dorado 中的VIEW,根据VIEW取得dataset,将dataset中Date列取出来,存到oracle中的Date列: SimpleDateFormat dateFormat ...

  4. 在oracle中处理日期大全

    在oracle中处理日期大全 TO_DATE格式   Day:   dd number 12   dy abbreviated fri   day spelled out friday   ddspt ...

  5. MySQL中各种日期格式转换

    日期格式的转换总结 1).unix time和日期格式互转 比如zabbix history表中的clock字段保存的是unix time,看到的是一串数字,可以使用FROM_UNIXTIME去转换 ...

  6. 一文搞懂select语句在MySQL中的执行流程!

    MySQL作为互联网行业使用最多的关系型数据库之一,与其免费.开源的特性是密不可分的.然而,很多小伙伴工作了很多年,只知道使用MySQL进行CRUD操作,这也导致很多小伙伴工作多年后,想跳槽进入大厂, ...

  7. poi导入excel日期处理_POI处理Excel中各种日期格式问题

    前不久写过一篇随笔<EXCEL解析之终极方法WorkbookFactory>,提到使用WorkbookFactory来处理Excel文件数据,最近发现一个问题就是这个办法不能很好的处理各种 ...

  8. 原来select语句在MySQL中是这样执行的!看完又涨见识了!这回我要碾压面试官!

    大家好,我是冰河~~ MySQL作为互联网行业使用最多的关系型数据库之一,与其免费.开源的特性是密不可分的.然而,很多小伙伴工作了很多年,只知道使用MySQL进行CRUD操作,这也导致很多小伙伴工作多 ...

  9. 使用JPA获取Oracle中的日期字段丢失时分秒

    2019独角兽企业重金招聘Python工程师标准>>> 使用JPA获取oracle中的日期字段发现没有时分秒,因为之前没有关注过这个字段, 最近由于需要,却发现时分秒奇怪的丢失.   ...

最新文章

  1. jupyter扩展插件Nbextensions的安装、使用
  2. vsftpd的配置文件路径,是在哪里指定的?
  3. 刨根问底儿 -- intVal($str) 跟 (int) $str 的运算结果有什么区别
  4. JavaScript3基础——运算符和类型转换
  5. 天津政府应急系统之GIS一张图(arcgis api for flex)解说(二)鹰眼模块
  6. when component is created twice - still no hint finally
  7. C#里面SQLite读取数据的操作
  8. loadrunner性能测试步骤
  9. 图像分块matlab程序,图像分块 matlab程序
  10. Android 动态创建控件并设置控件的大小之Android屏幕适配攻略(五)
  11. c语言中缀表达式求值_[源码和文档分享]基于C++的表达式计算求值
  12. ret php,php生成器的send方法详解,php yield send
  13. 阿里ai人工智能平台_AI标签众包平台
  14. 内核启动流程分析----内核启动
  15. 什么录播软件好用?超级好用的录屏软件在这里
  16. LPC1788内部EEPROM使用的问题
  17. 简述冯诺依曼体系结构计算机的工作原理。
  18. Memory barrier(内存屏障)
  19. Playing with ptrace原文
  20. 服务器丢包率与什么有关?以及常用的丢包解决方法

热门文章

  1. OSI 的七层模型与TCP/IP的四层网络模型
  2. 成都大数据急需人才培养基地落地天府软件园
  3. linux内核中的设计模式
  4. mysql 获取倒数第二_MySQL查询倒数第二条记录实现方法
  5. 621. Task Scheduler
  6. easywechat php支付,TP5+Easywechat实现小程序支付功能代码实例
  7. OPJ 2.1基本算法之枚举:熄灯问题
  8. 软件架构——架构师的职责
  9. 亚像素卷积和转置卷积
  10. 【手机信令轨迹挖掘02】基于手机信令的用户出行轨迹挖掘之用户定位