oracle 各資料型別dump說明(二)
這一節主要介紹 TIMESTAMP,TIMESTAMP WITH TIME ZONE,TIMESTAMP WITH LOCAL TIME ZONE,INTERVAL YEAR TO MONTH,INTERVAL DAY TO SECOND,RAW型別.
環境:
os:centos 6.6
db version:11.2.0.4
#檢視地區語言字符集資訊
select * from v$nls_parameters;
/*
PARAMETER VALUE
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_CHARACTERSET AL32UTF8
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
*/
#建測試表,裡面定義TIMESTAMP,TIMESTAMP WITH TIME ZONE,TIMESTAMP WITH LOCAL TIME ZONE,INTERVAL YEAR TO MONTH,INTERVAL DAY TO SECOND,RAW型別.
create table SCOTT.TB_TYPE02
(
t_timestmap TIMESTAMP(6),
t_timestmap_tz TIMESTAMP(6) WITH TIME ZONE,
t_timestmap_ltz TIMESTAMP(6) WITH LOCAL TIME ZONE,
t_interval_ytm INTERVAL YEAR(2) TO MONTH,
t_interval_dts INTERVAL DAY(2) TO SECOND(6),
t_raw RAW(10)
);
#插入測試資料
insert into SCOTT.TB_TYPE02
select current_timestamp,current_timestamp,current_timestamp,INTERVAL '12-2' YEAR(2) TO MONTH,INTERVAL '12 00:00:01' DAY(2) TO SECOND(6),
utl_raw.cast_to_raw('selectshen') from dual;
commit;
#timestamp型別
#timestamp型別為固定長度,根據是否儲存毫秒len=11或len=7,有毫秒位沒有時區,內部型別號Typ=180
#前七個位元組存放年月日時分秒,同data型別,前兩個位元組為世紀和年,世紀和年儲存是有加100,接下來兩個位元組是月和日,最後三個位元組是24小時格式的時分秒,時分秒儲存是都有加1.
#後四個位元組存放毫秒,毫秒位儲存的16進位制值合併後轉為10進位制即為毫秒值
select t_timestmap,dump(t_timestmap),dump(t_timestmap,16) from SCOTT.TB_TYPE02;
/*
T_TIMESTMAP DUMP(T_TIMESTMAP) DUMP(T_TIMESTMAP,16)
04-FEB-16 02.37.37.825548 PM Typ=180 Len=11: 120,116,2,4,15,38,38,49,52,220,224 Typ=180 Len=11: 78,74,2,4,f,26,26,31,34,dc,e0
*/
#04-FEB-16 02.37.37.825548 PM=120,116,2,4,15,38,38,49,52,220,224(十進位制),其中世紀120-100=20,年=116-100=16,月=2,日=4,時=15-1=14,分=38-1=37,秒=38-1=37
#04-FEB-16 02.37.37.825548 PM=78,74,2,4,f,26,26,31,34,dc,e0(十六進位制)
毫秒位十進位制49,52,220,224=十六進位制31,34,dc,e0
select to_number('3134dce0','xxxxxxxx') from dual;
/*
TO_NUMBER('3134DCE0','XXXXXXXX'
825548000
*/
小數位825548000->0.825548000=0.825548
#可以看到,如果把t_timestmap更新為sysdate,長度len=7,不儲存毫秒
update SCOTT.TB_TYPE02 set t_timestmap=sysdate;
select t_timestmap,dump(t_timestmap) from SCOTT.TB_TYPE02;
/*
T_TIMESTMAP DUMP(T_TIMESTMAP)
04-FEB-16 02.39.17.000000 PM Typ=180 Len=7: 120,116,2,4,15,40,18
*/
#TIMESTAMP WITH TIME ZONE型別
#TIMESTAMP WITH TIME ZONE型別為固定長度len=13,有毫秒位和時區,內部型別號Typ=181
#前七個位元組存放年月日時分秒,同data型別,前兩個位元組為世紀和年,世紀和年儲存是有加100,接下來兩個位元組是月和日,最後三個位元組是24小時格式的時分秒,時分秒儲存是都有加1.
#接下來四個位元組存放毫秒,毫秒位儲存的16進位制值合併後轉為10進位制即為毫秒值
#最後兩個位元組存放時區小時和時區分鐘
select t_timestmap_tz,dump(t_timestmap_tz),DUMP(t_timestmap_tz,16)from SCOTT.TB_TYPE02;
/*
T_TIMESTMAP_TZ DUMP(T_TIMESTMAP_TZ) DUMP(T_TIMESTMAP_TZ,16)
04-FEB-16 02.31.35.276282 PM +08:00 Typ=181 Len=13: 120,116,2,4,7,32,36,16,119,186,144,28,60 Typ=181 Len=13: 78,74,2,4,7,20,24,10,77,ba,90,1c,3c
*/
#04-FEB-16 02.31.35.276282 PM +08:00=120,116,2,4,7,32,36,16,119,186,144,28,60(十進位制)
年月時分秒演算法同TIMESTAMP型別,略.
時區小時=倒數第二個位元組-20=28-20=+8,時區分鐘=倒數第一個位元組-60=60-60=0.
算出來的時間是2016-02-04 6:31:35.276282加上時區小時和分就是2016-02-04 14:31:35.276282=04-FEB-16 02.31.35.276282 PM +08:00
#TIMESTAMP WITH LOCAL TIME ZONE型別
#TIMESTAMP WITH LOCAL TIME ZONE型別為固定長度len=11,有毫秒位,內部型別號Typ=231
#它儲存在資料庫中的是時區小時0時區分鐘0的時間,會透過當前會話的時區顯示時間
#前七個位元組存放年月日時分秒,同data型別,前兩個位元組為世紀和年,世紀和年儲存是有加100,接下來兩個位元組是月和日,最後三個位元組是24小時格式的時分秒,時分秒儲存是都有加1.
#接下來四個位元組存放毫秒,毫秒位儲存的16進位制值合併後轉為10進位制即為毫秒值
select t_timestmap_ltz,dump(t_timestmap_ltz),dump(t_timestmap_ltz,16) from SCOTT.TB_TYPE02;
/*
T_TIMESTMAP_LTZ DUMP(T_TIMESTMAP_LTZ) DUMP(T_TIMESTMAP_LTZ,16)
04-FEB-16 02.31.35.276282 PM Typ=231 Len=11: 120,116,2,4,7,32,36,16,119,186,144 Typ=231 Len=11: 78,74,2,4,7,20,24,10,77,ba,90
*/
#上面並不有時區資訊,dump中儲存的是6點,顯示的時間是下午2點,因為當前會話時區+8:00
#INTERVAL YEAR TO MONTH型別
#INTERVAL YEAR TO MONTH型別固定長度len=5,內部型別號Typ=182.
#前四個位元組存放年,dump的值有加0x80000000
#最後一個位元組存放月,dump的值有加60
select t_interval_ytm,dump(t_interval_ytm) from SCOTT.TB_TYPE02;
/*
T_INTERVAL_YTM DUMP(T_INTERVAL_YTM)
+12-02 Typ=182 Len=5: 128,0,0,12,62
*/
#INTERVAL DAY TO SECOND型別
#INTERVAL DAY TO SECOND型別固定長度len=11,內部型別號Typ=183
#前四個位元組存放天,dump的值有加0x80000000
#接下來三個位元組存放時分秒,dump的值有各加60
#最後四個位元組存放毫秒,dump的值有加0x80000000
select t_interval_dts,dump(t_interval_dts) from SCOTT.TB_TYPE02;
/*
T_INTERVAL_DTS DUMP(T_INTERVAL_DTS)
+12 00:00:01.000000 Typ=183 Len=11: 128,0,0,12,60,60,61,128,0,0,0
*/
#raw型別
#raw型別存放二進位制資料,可變長度,最大長度2000位元組,部型別號Typ=23
#顯示的值和dump的16程式值相同
select t_raw,dump(t_raw),dump(t_raw,16) from SCOTT.TB_TYPE02;
/*
T_RAW DUMP(T_RAW) DUMP(T_RAW,16)
73656C6563747368656E Typ=23 Len=10: 115,101,108,101,99,116,115,104,101,110 Typ=23 Len=10: 73,65,6c,65,63,74,73,68,65,6e
*/
環境:
os:centos 6.6
db version:11.2.0.4
#檢視地區語言字符集資訊
select * from v$nls_parameters;
/*
PARAMETER VALUE
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_CHARACTERSET AL32UTF8
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
*/
#建測試表,裡面定義TIMESTAMP,TIMESTAMP WITH TIME ZONE,TIMESTAMP WITH LOCAL TIME ZONE,INTERVAL YEAR TO MONTH,INTERVAL DAY TO SECOND,RAW型別.
create table SCOTT.TB_TYPE02
(
t_timestmap TIMESTAMP(6),
t_timestmap_tz TIMESTAMP(6) WITH TIME ZONE,
t_timestmap_ltz TIMESTAMP(6) WITH LOCAL TIME ZONE,
t_interval_ytm INTERVAL YEAR(2) TO MONTH,
t_interval_dts INTERVAL DAY(2) TO SECOND(6),
t_raw RAW(10)
);
#插入測試資料
insert into SCOTT.TB_TYPE02
select current_timestamp,current_timestamp,current_timestamp,INTERVAL '12-2' YEAR(2) TO MONTH,INTERVAL '12 00:00:01' DAY(2) TO SECOND(6),
utl_raw.cast_to_raw('selectshen') from dual;
commit;
#timestamp型別
#timestamp型別為固定長度,根據是否儲存毫秒len=11或len=7,有毫秒位沒有時區,內部型別號Typ=180
#前七個位元組存放年月日時分秒,同data型別,前兩個位元組為世紀和年,世紀和年儲存是有加100,接下來兩個位元組是月和日,最後三個位元組是24小時格式的時分秒,時分秒儲存是都有加1.
#後四個位元組存放毫秒,毫秒位儲存的16進位制值合併後轉為10進位制即為毫秒值
select t_timestmap,dump(t_timestmap),dump(t_timestmap,16) from SCOTT.TB_TYPE02;
/*
T_TIMESTMAP DUMP(T_TIMESTMAP) DUMP(T_TIMESTMAP,16)
04-FEB-16 02.37.37.825548 PM Typ=180 Len=11: 120,116,2,4,15,38,38,49,52,220,224 Typ=180 Len=11: 78,74,2,4,f,26,26,31,34,dc,e0
*/
#04-FEB-16 02.37.37.825548 PM=120,116,2,4,15,38,38,49,52,220,224(十進位制),其中世紀120-100=20,年=116-100=16,月=2,日=4,時=15-1=14,分=38-1=37,秒=38-1=37
#04-FEB-16 02.37.37.825548 PM=78,74,2,4,f,26,26,31,34,dc,e0(十六進位制)
毫秒位十進位制49,52,220,224=十六進位制31,34,dc,e0
select to_number('3134dce0','xxxxxxxx') from dual;
/*
TO_NUMBER('3134DCE0','XXXXXXXX'
825548000
*/
小數位825548000->0.825548000=0.825548
#可以看到,如果把t_timestmap更新為sysdate,長度len=7,不儲存毫秒
update SCOTT.TB_TYPE02 set t_timestmap=sysdate;
select t_timestmap,dump(t_timestmap) from SCOTT.TB_TYPE02;
/*
T_TIMESTMAP DUMP(T_TIMESTMAP)
04-FEB-16 02.39.17.000000 PM Typ=180 Len=7: 120,116,2,4,15,40,18
*/
#TIMESTAMP WITH TIME ZONE型別
#TIMESTAMP WITH TIME ZONE型別為固定長度len=13,有毫秒位和時區,內部型別號Typ=181
#前七個位元組存放年月日時分秒,同data型別,前兩個位元組為世紀和年,世紀和年儲存是有加100,接下來兩個位元組是月和日,最後三個位元組是24小時格式的時分秒,時分秒儲存是都有加1.
#接下來四個位元組存放毫秒,毫秒位儲存的16進位制值合併後轉為10進位制即為毫秒值
#最後兩個位元組存放時區小時和時區分鐘
select t_timestmap_tz,dump(t_timestmap_tz),DUMP(t_timestmap_tz,16)from SCOTT.TB_TYPE02;
/*
T_TIMESTMAP_TZ DUMP(T_TIMESTMAP_TZ) DUMP(T_TIMESTMAP_TZ,16)
04-FEB-16 02.31.35.276282 PM +08:00 Typ=181 Len=13: 120,116,2,4,7,32,36,16,119,186,144,28,60 Typ=181 Len=13: 78,74,2,4,7,20,24,10,77,ba,90,1c,3c
*/
#04-FEB-16 02.31.35.276282 PM +08:00=120,116,2,4,7,32,36,16,119,186,144,28,60(十進位制)
年月時分秒演算法同TIMESTAMP型別,略.
時區小時=倒數第二個位元組-20=28-20=+8,時區分鐘=倒數第一個位元組-60=60-60=0.
算出來的時間是2016-02-04 6:31:35.276282加上時區小時和分就是2016-02-04 14:31:35.276282=04-FEB-16 02.31.35.276282 PM +08:00
#TIMESTAMP WITH LOCAL TIME ZONE型別
#TIMESTAMP WITH LOCAL TIME ZONE型別為固定長度len=11,有毫秒位,內部型別號Typ=231
#它儲存在資料庫中的是時區小時0時區分鐘0的時間,會透過當前會話的時區顯示時間
#前七個位元組存放年月日時分秒,同data型別,前兩個位元組為世紀和年,世紀和年儲存是有加100,接下來兩個位元組是月和日,最後三個位元組是24小時格式的時分秒,時分秒儲存是都有加1.
#接下來四個位元組存放毫秒,毫秒位儲存的16進位制值合併後轉為10進位制即為毫秒值
select t_timestmap_ltz,dump(t_timestmap_ltz),dump(t_timestmap_ltz,16) from SCOTT.TB_TYPE02;
/*
T_TIMESTMAP_LTZ DUMP(T_TIMESTMAP_LTZ) DUMP(T_TIMESTMAP_LTZ,16)
04-FEB-16 02.31.35.276282 PM Typ=231 Len=11: 120,116,2,4,7,32,36,16,119,186,144 Typ=231 Len=11: 78,74,2,4,7,20,24,10,77,ba,90
*/
#上面並不有時區資訊,dump中儲存的是6點,顯示的時間是下午2點,因為當前會話時區+8:00
#INTERVAL YEAR TO MONTH型別
#INTERVAL YEAR TO MONTH型別固定長度len=5,內部型別號Typ=182.
#前四個位元組存放年,dump的值有加0x80000000
#最後一個位元組存放月,dump的值有加60
select t_interval_ytm,dump(t_interval_ytm) from SCOTT.TB_TYPE02;
/*
T_INTERVAL_YTM DUMP(T_INTERVAL_YTM)
+12-02 Typ=182 Len=5: 128,0,0,12,62
*/
#INTERVAL DAY TO SECOND型別
#INTERVAL DAY TO SECOND型別固定長度len=11,內部型別號Typ=183
#前四個位元組存放天,dump的值有加0x80000000
#接下來三個位元組存放時分秒,dump的值有各加60
#最後四個位元組存放毫秒,dump的值有加0x80000000
select t_interval_dts,dump(t_interval_dts) from SCOTT.TB_TYPE02;
/*
T_INTERVAL_DTS DUMP(T_INTERVAL_DTS)
+12 00:00:01.000000 Typ=183 Len=11: 128,0,0,12,60,60,61,128,0,0,0
*/
#raw型別
#raw型別存放二進位制資料,可變長度,最大長度2000位元組,部型別號Typ=23
#顯示的值和dump的16程式值相同
select t_raw,dump(t_raw),dump(t_raw,16) from SCOTT.TB_TYPE02;
/*
T_RAW DUMP(T_RAW) DUMP(T_RAW,16)
73656C6563747368656E Typ=23 Len=10: 115,101,108,101,99,116,115,104,101,110 Typ=23 Len=10: 73,65,6c,65,63,74,73,68,65,6e
*/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28539951/viewspace-1986441/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle 各資料型別dump說明(三)Oracle資料型別
- oracle 各資料型別dump說明(一)Oracle資料型別
- Dump型別說明型別
- (轉)oracle dump block格式說明OracleBloC
- mssql sqlserver text資料型別專題說明SQLServer資料型別
- 【clickhouse專欄】基礎資料型別說明資料型別
- zt_Oracle Dump Redo Log File 說明Oracle
- oracle等待事件型別wait_class說明Oracle事件型別AI
- ORACLE DATE型別和TIMESTAMP型別DUMP換算Oracle型別
- oracle資料塊轉儲說明Oracle
- 塗鴉雲平臺資料型別和取值約束說明資料型別
- Object C學習筆記1-基本資料型別說明Object筆記資料型別
- Oracle資料型別Oracle資料型別
- Oracle 資料型別Oracle資料型別
- 二、ClickHouse 資料型別資料型別
- Swift 資料型別(二)Swift資料型別
- Oracle基本資料型別儲存格式淺析(三)——日期型別(二)Oracle資料型別
- redis各資料型別應用概述Redis資料型別
- Oracle 使用 ass.awk 工具檢視 system state dump 說明Oracle
- Oracle10g等待事件型別wait_class說明Oracle事件型別AI
- Oracle資料型別對應Java型別Oracle資料型別Java
- 【轉】ORACLE資料型別Oracle資料型別
- Oracle anydata資料型別Oracle資料型別
- ORACLE NUMBER資料型別Oracle資料型別
- [轉]oracle資料型別Oracle資料型別
- 二, 基本資料型別(上)資料型別
- NULL的資料型別(二)Null資料型別
- javascript 判斷各種資料的型別JavaScript型別
- golang — mgo解析各種資料型別分析Golang資料型別
- PHP memcached 各種資料型別儲存PHP資料型別
- oracle18c資料庫特性說明Oracle資料庫
- oracle 資料檔案(Datafile ) 大小 限制 說明Oracle
- Oracle 資料檔案 reuse 屬性 說明Oracle
- oracle資料檔案頭轉儲說明Oracle
- ORACLE 10g資料泵使用說明Oracle 10g
- DB2資料庫中的各資料型別DB2資料庫資料型別
- Oracle基本資料型別儲存格式淺析(二)——數字型別Oracle資料型別
- SSIS 資料型別 第二篇:變數的資料型別資料型別變數