<!-- [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]> <object classid="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_1 DATE_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 set nls_date_format='yyyy-mm-dd';
Session altered
SQL> select to_char(sysdate,'yyyy-mm-dd hh24: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_1 DATE_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-dd hh24: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_1 DATE_2 DATE_3
------------------- ---------- ----------
2087-03-09 16:49:02 09-03-2011 09-03-2050
注意:如果日期中的年份使用了YYYY 格式,但是只提供了2 位的年份,那么oracle 数据库就会使用YY 格式来解释日期。