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