一. 內(nèi)建的數(shù)據(jù)類型
1. 數(shù)字相關(guān)
1)INTEGER
整型,范圍為:-2147483647-2147483648
2)SMALLINT
短整型,-32767-32767
3)BIGINT
4)SERIAL、SERIAL8、BIGSERIAL
這三種類型都會自動產(chǎn)生數(shù)據(jù),并且用戶可選擇是否提供初始值.
不同之處在于:
SERIAL類型的數(shù)據(jù)占用4個字節(jié)的存儲空間;
SERIAL8類型的數(shù)據(jù)一般情況下占用10個字節(jié)的存儲空間(在Extended Parallel Server中占用8個字節(jié)的存儲空間);
BIGSERIAL類型的數(shù)據(jù)占用8個字節(jié)的存儲空間。
eg1. 創(chuàng)建一個表route_rule,它的主鍵rule_id是屬于SERIAL自增類型的,參考建表語句如下:
create table route_rule
(
rule_id serial not null,
rule varchar(128) not null,
action varchar(32) not null,
route_arg varchar(32),
primary key (rule_id) constraint PK_ROUTE_RULE
);
eg2. 如何查詢serial型字段的當(dāng)前值?
5)DECIMAL(p,s)
其中p是整個數(shù)據(jù)的有效位,s是小數(shù)點后位數(shù),1<p<32,s可以為0。不指定時默認(rèn)為16位。
eg1:在如下實例中,創(chuàng)建了human_task_exp表,其中probability為雙精度類型:
create table human_task_exp(
serviceid VARCHAR(30) not null,
seconds INTEGER default 0 not null,
probability DECIMAL(16,14) default 0)
)
6)FLOAT、SMALLFLOAT
這兩種類型的數(shù)據(jù)使用于不要求精度而要求量值的場合,如科學(xué)計算,F(xiàn)LOAT雙精度數(shù),通常占8個字節(jié),有16位十進(jìn)制有效位,而smallint為單精度數(shù),占4字節(jié),8位十進(jìn)制有效位。但數(shù)值超出精度范圍,則都看作0處理
7)MONEY(p, s)
同decimal完全相同,但顯示money類型時候會自動顯示現(xiàn)金符號,默認(rèn)是$。
2. 時間相關(guān)
1)DATE
日期型,隨數(shù)據(jù)庫不同而不同.
eg1. test_date表中包含一個birthday的日期字段,可以通過如下語句插入:
創(chuàng)建表的語句參考如下:
CREATE TABLE test_date(birthday date);
插入記錄(一條生日為1982年11月21日的數(shù)據(jù))的語句參考如下:
insert into test_date values('11/21/1982');
也可通過如下語句執(zhí)行如上語句相同的結(jié)果:
insert into test_date values(date('11/21/1982'));
eg2. 將DATE類型的數(shù)據(jù)轉(zhuǎn)換為指定的字符類型
例如將上面的11/21/1982變成1982-11-21的類型.語句如下:
select TO_CHAR(birthday, '%Y-%m-%d') from test_date;
eg3. 獲得當(dāng)前日期
select today from test_date;
eg4. 日期相加減,得到天數(shù),例如將test_date中的當(dāng)前日期-birthday字段,可得到出生天數(shù),語句如下:
select to_date(to_char(today,'%Y-%m-%d'),'%Y-%m-%d') - to_date(to_char(birthday,'%Y-%m-%d'),'%Y-%m-%d') from test_date;
對于1982-11-21,可得到如下的返回結(jié)果(oh,my god,我已經(jīng)出生那么多天咯
):
10211 00:00:00.00000
2)DATETIME
用于記錄時間點,表示的精度可以任意指定,可以包含年份、月份、日。
eg1. 將表test_datetime的字段birthtime定義為DATETIME類型,建表語句參考如下:
create table test_datetime(birthtime datetime year to fraction(2));
eg2. 若要在該表中插入一條1982-11-21 12:20:00的數(shù)據(jù):
insert into test_datetime values('1982-11-21 12:20:00');
eg3. 插入eg2中同樣的記錄,還可以使用如下語句:
insert into test_datetime values(datetime(1982-11-21 12:20:00.79) year to fraction(2));
eg4. 將DATE類型的數(shù)據(jù)轉(zhuǎn)換為指定的字符類型:
select TO_CHAR(birthtime, '%Y-%m-%d %H:%M:%S') from test_datetime;
上面的出生時間的如上語句的結(jié)果如下:
1982-11-21 12:20:00
3)INTERVAL
interval類型的數(shù)值用于表示兩個時間點之間的間隔.
eg1. 將表test_interval的字段interval_filed字段定義為INTERVAL類型,并且只包含“時:分:秒”,建表語句參考如下:
create table test_interval(interval_filed interval hour to second);
eg2. 在上面創(chuàng)建的表中插入一條記錄,時間是12:20:05,語句參考如下:
insert into test_interval values ('12:20:05');
eg3. 達(dá)到如上語句相同的結(jié)果也可以使用到interval函數(shù),語句參考如下:
insert into test_interval values(interval(12:20:05) hour to second);
eg4. 將INTERVAL類型轉(zhuǎn)換為指定的字符類型(HH:MM:SS格式,直接查詢就是這個格式,嘻嘻),語句參考如下:
select * from test_interval;
運行結(jié)果就是:12:20:05。
3. 字符相關(guān)
1)VARCHAR(n, r)
存儲變長字符型,最長255字節(jié)。
2)CHAR(n)
定義寬度為n的字符字段,最長255。
3)NCHAR(n)
同char,但允許GLS應(yīng)用程序的不同排序順序。
4)NVARCHAR(m, r)
同varchar,但允許GLS應(yīng)用程序的不同排序順序。
5)LVARCHAR(m)
存儲變長字符串,最大32739個字節(jié).
6)CHARACTER VARYING(n, r)
存儲用戶定義的數(shù)據(jù)類型,其內(nèi)部結(jié)構(gòu)對于數(shù)據(jù)庫服務(wù)器不透明,即不可存取。
4. 大對象相關(guān)
1)BYTE
二進(jìn)制數(shù)據(jù),最大2的31次方字節(jié)。byte用于存儲任意數(shù)據(jù),一般用來存儲圖片和聲音文件等。
2)TEXT
文本型,最大2的31次方字節(jié)。
3)BLOB
以隨機(jī)存取塊的形式存儲二進(jìn)制數(shù)據(jù)。
4)CLOB
以隨機(jī)存取塊的形式存儲文本數(shù)據(jù)。
5. MISC
1)BOOLEAN
存儲布爾值true和false。
二. 復(fù)雜對象類型(complex data type)
1、復(fù)雜數(shù)據(jù)類型
由一個或多個數(shù)據(jù)類型組合而成。復(fù)雜數(shù)據(jù)類型有row數(shù)據(jù)類型、集合數(shù)據(jù)類型。
2、Row數(shù)據(jù)類型
由一個或多個任意的數(shù)據(jù)類型組成;
eg1. 如下創(chuàng)建一個patient的Row數(shù)據(jù)類型,具有integer類型的num和char類型的name字段,參考語句如下:
CREATE ROW TYPE patient
(
num int,
name char(30)
);
3、集合數(shù)據(jù)類型
由一個或多個同樣的數(shù)據(jù)類型集合組成,包括SET、LIST和MULTISET。
1)SET(e)數(shù)據(jù)類型
存儲元素的非排序集合,所有元素都具有同一類型e;不允許重復(fù)值.
eg1、在如下表中將description字段定義為SET類型,參考語句如下:
CREATE TABLE employee
(
name CHAR(30),
salary INTEGER,
description SET(VARCHAR(100) NOT NULL)
);
eg2. 如何插入SET類型的數(shù)據(jù)?
eg3. 如何查詢SET類型的數(shù)據(jù)?
2)LIST(e)數(shù)據(jù)類型
存儲元素的排序集合,所有元素都具有同一類型e;允許重復(fù)值.
eg1. 創(chuàng)建一個test_list的表,該表的col1是LIST(varcahr)數(shù)據(jù)類型,建表語句參考如下:
create table test_list
(
col1 list(varchar(30) not null),
col2 DECIMAL(18,6),
col3 char(18)
);
eg2. 如何插入LIST類型的值?
eg3. 如何查詢LIST類型的值?
3)MULTISET(e)數(shù)據(jù)類型
存儲元素的非排序集合,所有元素都具有同一類型e;允許重復(fù)值。
三. 自定義對象類型(User Defined Datatypes)
1、Distinct
2、Opaque
posted on 2010-11-04 17:31
阿蜜果 閱讀(11096)
評論(1) 編輯 收藏 所屬分類:
database