设为首页 收藏本站
查看: 917|回复: 0

[经验分享] oracle对2位年份的处理

[复制链接]

尚未签到

发表于 2016-7-27 09:55:47 | 显示全部楼层 |阅读模式
  <!-- [if gte mso 9]><xml><w:WordDocument><w:View>Normal</w:View><w:Zoom>0</w:Zoom><w:PunctuationKerning/><w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing><w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery><w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery><w:ValidateAgainstSchemas/><w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid><w:IgnoreMixedContent>false</w:IgnoreMixedContent><w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText><w:Compatibility><w:SpaceForUL/><w:BalanceSingleByteDoubleByteWidth/><w:DoNotLeaveBackslashAlone/><w:ULTrailSpace/><w:DoNotExpandShiftReturn/><w:AdjustLineHeightInTable/><w:BreakWrappedTables/><w:SnapToGridInCell/><w:WrapTextWithPunct/><w:UseAsianBreakRules/><w:DontGrowAutofit/><w:UseFELayout/></w:Compatibility><w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel></w:WordDocument></xml><![endif]--><!-- [if gte mso 9]><xml><w:LatentStyles DefLockedState="false" LatentStyleCount="156"></w:LatentStyles></xml><![endif]--><!-- [if !mso]><objectclassid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id=ieooui></object><style>st1/:*{behavior:url(#ieooui) }</style><![endif]--><!-- [if gte mso 10]><style>/* Style Definitions */table.MsoNormalTable{mso-style-name:普通表格;mso-tstyle-rowband-size:0;mso-tstyle-colband-size:0;mso-style-noshow:yes;mso-style-parent:"";mso-padding-alt:0cm 5.4pt 0cm 5.4pt;mso-para-margin:0cm;mso-para-margin-bottom:.0001pt;mso-pagination:widow-orphan;font-size:10.0pt;font-family:"Times New Roman";mso-fareast-font-family:"Times New Roman";mso-ansi-language:#0400;mso-fareast-language:#0400;mso-bidi-language:#0400;}table.MsoTableGrid{mso-style-name:网格型;mso-tstyle-rowband-size:0;mso-tstyle-colband-size:0;border:solid windowtext 1.0pt;mso-border-alt:solid windowtext .5pt;mso-padding-alt:0cm 5.4pt 0cm 5.4pt;mso-border-insideh:.5pt solid windowtext;mso-border-insidev:.5pt solid windowtext;mso-para-margin:0cm;mso-para-margin-bottom:.0001pt;text-align:justify;text-justify:inter-ideograph;mso-pagination:none;font-size:10.0pt;font-family:"Times New Roman";mso-ansi-language:#0400;mso-fareast-language:#0400;mso-bidi-language:#0400;}</style><![endif]-->
Oracle数据库中存储4位的年份,但是当你只提供2位数字的年份,那么oracle就会根据你所使用的YY还是RR格式来解释实际,如果提供了完整的年份,那是最好的。
1.RR格式:

指定年的2位数字
00-49
50-99


当年的后
两位数字
00-49
规则1:指定年的前两位数字就等于当年的前两位数字
规则2:指定年的前两位数字就等于当年的前两位数字减去1
50-99
规则3:指定年的前两位数字就等于当年的前两位数字加上1
规则4:指定年的前两位数字就等于当年的前两位数字
我们来看看下面这个查询:
SQL> select
2 to_char(sysdate,'dd-mm-yyyy') date_1,
3 to_char(to_date('09-03-11','dd-mm-rr'),'dd-mm-yyyy')date_2,
4 to_char(to_date('09-03-50','dd-mm-rr'),'dd-mm-yyyy')date_3
5 from dual;

DATE_1DATE_2 DATE_3
---------- ---------- ----------
09-03-2011 09-03-2011 09-03-1950

当前的日期为2011年3月9日
DATE_2验证了上面的规则1:我提供的rr(11)与当前的系统日期的年份2011的最后两位数字11都00-49这个范围。
DATE_3验证了上面的规则2:我提供的rr(50)所在的范围(50-99)大于当前系统年份2011的最后两位数字11所在的范围(00-49),所以将20-1=19,再组合到一起就得到了1950年,这才是指定年份的年。

如果我们要验证规则3和规则4,那么就得更改操作系统时间。
在XP系统中,我们想要修改系统时间的话,可以按照下面的方法来进行。
1、双击任务栏右下角的时间,打开“日期和时间属性”对话窗口。
2、在时间和日期选项卡中,在日期和时间栏里修改我们需要的日期及时间。
3、确定退出后,我们可以看到日期和时间已经是我们想要的结果了。

修改会话的时间格式:
SQL> alter session setnls_date_format='yyyy-mm-dd';
Session altered

SQL> select to_char(sysdate,'yyyy-mm-ddhh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YYYY-MM-DDHH2
------------------------------
2087-03-09 16:27:29

下面验证规则3和规则4:
SQL> select
2 to_char(sysdate,'dd-mm-yyyy') date_1,
3 to_char(to_date('09-03-11','dd-mm-rr'),'dd-mm-yyyy')date_2,
4 to_char(to_date('09-03-50','dd-mm-rr'),'dd-mm-yyyy')date_3
5 from dual;

DATE_1DATE_2 DATE_3
---------- ---------- ----------
09-03-2087 09-03-2111 09-03-2050

规则3:指定的年份是11年,其所在的范围(00-49)小于与当前系统年份2087的年份最后两位数字不在范围(50-99),所以当前年份的前两位数字20+1=21才是指定年份的具体日期:2111年3月9日。
规则4:同规则1,我们得到了DATE_3的值:09-03-2050。
注意:如果日期中的年份使用RRRR格式,但是只提供了2位的年份,那么oracle数据库就会使用RR格式来解释日期。

2.YY格式
在使用YY格式时,如果只提供年份的后两位,那么此年份的前两位与当前系统年份的前两位相同。
SQL> alter session set nls_date_format='yyyy-mm-ddhh24:mi:ss';
Session altered

SQL> select
2 to_char(sysdate) date_1,
3 to_char(to_date('09-03-11','dd-mm-yy'),'dd-mm-yyyy')date_2,
4 to_char(to_date('09-03-50','dd-mm-yy'),'dd-mm-yyyy')date_3
5 from dual;

DATE_1DATE_2 DATE_3
------------------- ---------- ----------
2087-03-09 16:49:02 09-03-2011 09-03-2050

注意:如果日期中的年份使用了YYYY格式,但是只提供了2位的年份,那么oracle数据库就会使用YY格式来解释日期。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-250064-1-1.html 上篇帖子: oracle 解决匹配的几种方法 下篇帖子: jsp oracle分页与sqlserver分页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表