select语句(4)--Oracle中的日期格式及千年虫问题
一、日期格式及表示的含义:
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中的日期格式及千年虫问题相关推荐
- c oracle格式化时间,JAVA和ORACLE中的日期格式
报表中同时用到了从JAVA中取得的日期和从ORACLE中取得的日期,日期格式必须统一. 1.JAVA中,我用SimpleDateFormat()格式化日期,语法如下: SimpleDateFormat ...
- ORACLE中查询日期格式
原始格式: select Starttime,Endtime from ELEARNING.Opt_Training where Orgid = '6c457da0-7825-4df7-bcd7-0e ...
- dorado 中的日期--》oracle中的日期
一.在类中得到dorado 中的VIEW,根据VIEW取得dataset,将dataset中Date列取出来,存到oracle中的Date列: SimpleDateFormat dateFormat ...
- 在oracle中处理日期大全
在oracle中处理日期大全 TO_DATE格式 Day: dd number 12 dy abbreviated fri day spelled out friday ddspt ...
- MySQL中各种日期格式转换
日期格式的转换总结 1).unix time和日期格式互转 比如zabbix history表中的clock字段保存的是unix time,看到的是一串数字,可以使用FROM_UNIXTIME去转换 ...
- 一文搞懂select语句在MySQL中的执行流程!
MySQL作为互联网行业使用最多的关系型数据库之一,与其免费.开源的特性是密不可分的.然而,很多小伙伴工作了很多年,只知道使用MySQL进行CRUD操作,这也导致很多小伙伴工作多年后,想跳槽进入大厂, ...
- poi导入excel日期处理_POI处理Excel中各种日期格式问题
前不久写过一篇随笔<EXCEL解析之终极方法WorkbookFactory>,提到使用WorkbookFactory来处理Excel文件数据,最近发现一个问题就是这个办法不能很好的处理各种 ...
- 原来select语句在MySQL中是这样执行的!看完又涨见识了!这回我要碾压面试官!
大家好,我是冰河~~ MySQL作为互联网行业使用最多的关系型数据库之一,与其免费.开源的特性是密不可分的.然而,很多小伙伴工作了很多年,只知道使用MySQL进行CRUD操作,这也导致很多小伙伴工作多 ...
- 使用JPA获取Oracle中的日期字段丢失时分秒
2019独角兽企业重金招聘Python工程师标准>>> 使用JPA获取oracle中的日期字段发现没有时分秒,因为之前没有关注过这个字段, 最近由于需要,却发现时分秒奇怪的丢失. ...
最新文章
- jupyter扩展插件Nbextensions的安装、使用
- vsftpd的配置文件路径,是在哪里指定的?
- 刨根问底儿 -- intVal($str) 跟 (int) $str 的运算结果有什么区别
- JavaScript3基础——运算符和类型转换
- 天津政府应急系统之GIS一张图(arcgis api for flex)解说(二)鹰眼模块
- when component is created twice - still no hint finally
- C#里面SQLite读取数据的操作
- loadrunner性能测试步骤
- 图像分块matlab程序,图像分块 matlab程序
- Android 动态创建控件并设置控件的大小之Android屏幕适配攻略(五)
- c语言中缀表达式求值_[源码和文档分享]基于C++的表达式计算求值
- ret php,php生成器的send方法详解,php yield send
- 阿里ai人工智能平台_AI标签众包平台
- 内核启动流程分析----内核启动
- 什么录播软件好用?超级好用的录屏软件在这里
- LPC1788内部EEPROM使用的问题
- 简述冯诺依曼体系结构计算机的工作原理。
- Memory barrier(内存屏障)
- Playing with ptrace原文
- 服务器丢包率与什么有关?以及常用的丢包解决方法