国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

Oracle基本數據類型存儲格式淺析—日期類型(1)

2024-08-29 13:37:21
字體:
來源:轉載
供稿:網友
Oracle基本數據類型存儲格式淺析(三)——日期類型
 
  
下面通過一個例子進行說明。 SQL> create table test_date (date_col date);
表已創建。 SQL> insert into test_date values (to_date('2000-1-1 0:0:0', 'yyyy-mm-dd hh24:mi:ss'));
已創建 1 行。
SQL> insert into test_date values (to_date('1-1-1 0:0:0', 'yyyy-mm-dd hh24:mi:ss'));
已創建 1 行。
SQL> insert into test_date values (to_date('-1-1-1 0:0:0', 'syyyy-mm-dd hh24:mi:ss'));
已創建 1 行。
SQL> insert into test_date values (to_date('-101-1-1 0:0:0', 'syyyy-mm-dd hh24:mi:ss'));
已創建 1 行。
SQL> insert into test_date values (to_date('-4712-1-1 0:0:0', 'syyyy-mm-dd hh24:mi:ss'));
已創建 1 行。
SQL> insert into test_date values (to_date('9999-12-31 23:59:59', 'syyyy-mm-dd hh24:mi:ss'));
已創建 1 行。
SQL> insert into test_date values (sysdate);
已創建 1 行。
SQL> insert into test_date values (to_date('-4713-1-1 0:0:0', 'syyyy-mm-dd hh24:mi:ss'));
insert into test_date values (to_date('-4713-1-1 0:0:0', 'syyyy-mm-dd hh24:mi:ss'))
*
ERROR 位于第 1 行:
ORA-01841: (全)年度值必須介于 -4713 和 +9999 之間,且不為 0 SQL> insert into test_date values (to_date('0000-1-1 0:0:0', 'yyyy-mm-dd hh24:mi:ss'));
insert into test_date values (to_date('0000-1-1 0:0:0', 'yyyy-mm-dd hh24:mi:ss'))
*
ERROR 位于第 1 行:
ORA-01841: (全)年度值必須介于 -4713 和 +9999 之間,且不為 0 SQL> col dump_date format a80
SQL> select to_char(date_col, 'syyyy-mm-dd hh24:mi:ss'), dump(date_col) dump_date from test_date;
TO_CHAR(DATE_COL,'SY DUMP_DATE
-------------------- ---------------------------------------
2000-01-01 00:00:00 Typ=12 Len=7: 120,100,1,1,1,1,1
0001-01-01 00:00:00 Typ=12 Len=7: 100,101,1,1,1,1,1
-0001-01-01 00:00:00 Typ=12 Len=7: 100,99,1,1,1,1,1
-0101-01-01 00:00:00 Typ=12 Len=7: 99,99,1,1,1,1,1
-4712-01-01 00:00:00 Typ=12 Len=7: 53,88,1,1,1,1,1
9999-12-31 23:59:59 Typ=12 Len=7: 199,199,12,31,24,60,60
2004-12-15 13:56:19 Typ=12 Len=7: 120,104,12,15,14,57,20
已選擇7行。通過最后兩條語句已經可以看出Oracle的DATE類型的取值范圍是公元前4712年1月1日至公元9999年12月31日。而且根據日期的特定,要不然是公元1年,要不然是公元前1年,不會出現0年的情況。
  日期類型長度是7,7個字節分別表示世紀、年、月、日、時、分和秒。
  由于不會出現0的情況,月和日都是按照原值存儲的,月的范圍是1~12,日的范圍是1~31。
  由于時、分、秒都會出現0的情況,因此存儲時采用原值加1的方式。0時保存為1,13時保存為14,23時保存為24。分和秒的情況與小時類似。小時的范圍是0~23,在數據庫中以1~24保存。分和秒的范圍都是0~59,在數據庫中以1~60保存。
  年和世紀的情況相對比較復雜,可分為公元前和公元后兩種情況。由于最小的世紀的值是-47(公元前4712年),最大值是99(公元9999年)。為了避免負數的產生,oracle把世紀加100保存在數據庫中。公元2000年,世紀保存為120,公元9999年,世紀保存為199,公元前101年,世紀保存為99(100+(-1)),公元前4712年,世紀保存為53(100+(-47))。

  注重,對于公元前1年,雖然已經是公元前了,但是表示世紀的前兩位的值仍然是0,因此,這時的保存的世紀的值仍然是100。世紀的范圍是-47~99,保存的值是53~199。
  年的保存與世紀的保存方式類似,也把年的值加上100進行保存。對于公元2000年,年保持為100,公元1年保存為101,公元2004年保存為104,公元9999年保存為199,公元前1年,保存為99(100+(-1)),公元前101年,保存為99(100+(-1)),公元前4712年保存為88(100+(-12))。對于公元前的年,保存的值總是小于等于100,對于公元后的年,保存的值總是大于等于100。年的范圍是0~99,保存的值是1~199。
  注重:一般的世紀,都包含了100年,而對于0世紀,由于包含公元前和公元后兩部分且不包含0年,因此包含了198年。
 
 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 邛崃市| 宾川县| 济源市| 万宁市| 广河县| 平塘县| 呼图壁县| 德昌县| 左权县| 永福县| 鸡泽县| 嘉荫县| 武宣县| 土默特左旗| 天等县| 齐河县| 临江市| 靖边县| 牡丹江市| 西青区| 南阳市| 大石桥市| 阿拉善右旗| 香格里拉县| 和龙市| 贞丰县| 克拉玛依市| 黑龙江省| 大庆市| 隆林| 白朗县| 平武县| 东阿县| 屏边| 天峨县| 屯留县| 宝山区| 嘉善县| 顺昌县| 开封市| 惠安县|