一、日期格式及表示的含义:
          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. MBTI职业性格测试结果——ISTJ型
  2. matlab的fft函数写法,matlab的fft函数的使用例子
  3. 搞嵌入式Linux,做底层还是应用?底层要掌握哪些技能?
  4. ext2 源代码解析之 “从路径名到目标结点” (一)
  5. PHP重建索引数组的键值
  6. 消除由try/catch语句带来的Warning
  7. H3C 常用信息查看命令
  8. LDA主题模型原理解析与python实现
  9. aop日志 android,ASM实现Android APK的AOP日志统计
  10. spring源码系列(五)——番外篇回答网友的问题
  11. 桥接模式与路由模式有什么不同
  12. 定义函数和更多形式(基础篇)
  13. 360加固问题)如何解决Mac mac big sur 11.2.1 提示“您没有权限来打开应用程序‘xxx’”?以及无法打开×××,因为无法验证开发者
  14. 2021年初级会计实物会计概述考试真题
  15. 湖南省计算机等级考试(二级)题库 第六部分
  16. 小程序token有效期_微信小程序token过期时间后重新获取-微信小程序过期恢复步骤-微信小程序怎么找...
  17. java遍历一个map集合_Java遍历Map集合的四种方式
  18. 用python画一只小狗
  19. ECG,脉搏波,心率,心率变异性,血压
  20. 图书条形码跟ISBN号互相转换的类(续)

热门文章

  1. Python 简易版图书管理系统
  2. Generative Adversarial Nets
  3. 打造自己的LoRaWAN网关,进阶3:设参运维
  4. 自己计算机设置盘密码怎么操作,Win7电脑如何用u盘设置密码重设盘?
  5. 基于飞腾FT-2000/4-DSK ROS安装(ubuntu18.04.4LTS)
  6. HTTP返回结果状态码小结
  7. Kindle电子书资源网站汇总 转自豆瓣
  8. 北方民族大学计算机考研科目,北方民族大学(专业学位)计算机技术研究生考试科目和考研参考书目...
  9. 北方民族大学计算机科学与技术硕士,2014年北方民族大学计算机科学与技术考研调剂信息(第二批)...
  10. be idle sometimes to_关于好习惯的英语名言