DB2數(shù)據(jù)庫資料整理_第1頁
DB2數(shù)據(jù)庫資料整理_第2頁
DB2數(shù)據(jù)庫資料整理_第3頁
DB2數(shù)據(jù)庫資料整理_第4頁
DB2數(shù)據(jù)庫資料整理_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、一、DB2常用函數(shù)函數(shù)函數(shù)解釋函數(shù)舉例AVG() 返回一組數(shù)值的平均值SELECT AVG(SALARY) FROMB SEMPMS;OUNT()返回一組行或值的個數(shù).SELECTCOUNT(*)FROMBSEMPMS;MAX() 返回一組數(shù)值中的最大值.SELECTMAX(SALARY)FROMBSEMPMS;MIN() . 返回一組數(shù)值中的最小值SELECTMIN(SALARY)FROMBSEMPMS;SUM() 返回一組數(shù)據(jù)的和.SELECTSUM(SALARY)FROMBSEMPMS;CEILING() 返回比參數(shù)大或等于參數(shù)的最小的整數(shù)值. SELECTCEILING(3.56)FR

2、OMBSEMPMS;DOUBLE()如果參數(shù)是一個數(shù)字表達式,返回與其相對應(yīng)的浮點數(shù),如果參數(shù)是 字符串表達式,則返回該數(shù)的字符串表達式.SELECTDOUBLE(5678)FROMBSEMPMS;CONCAT() CONCAT() CCOONNCCAATT() 返回兩個字符串的連接SELECTCONCAT(EMP_NO,EMP_NAM)FROMBSEMPMS;Char()轉(zhuǎn)化為字符串類型Select char(15.5000) froms ysibm.sysdummy1Date()轉(zhuǎn)化為日期時間select date(2008-01-01) from sysibm.sysdummy1dayo

3、fyear(arg)返回arg在年內(nèi)的天值Dayofweek(arg)返回arg在周內(nèi)的天值days(arg)返回日期的整數(shù)表示法,從0001-01-01來的天數(shù)。midnight_seconds(arg)午夜和arg之間的秒數(shù)Monthname(arg)返回arg的月份名Dayname(arg)返回arg的星期current dat系統(tǒng)時間select current date from sysibm.sysdummy1current date + 1返回當前時間的下一天(年月 時 同理)select current date + 1 day from sysibm.sysdummy1cur

4、rentdate+1YEAR currentdate+3YEARS+2MONTHS+15DAYS currenttime+5HOURS-3MINUTES+10SECONDS使用英語來執(zhí)行日期和時間計算currentdate+1YEAR currentdate+3YEARS+2MONTHS+15DAYS currenttime+5HOURS-3MINUTES+10SECONDSdays(currentdate)-days(date(1999-10-22)計算兩個日期之間的天數(shù)days(currentdate)-days(date(1999-10-22)char(currentdate) char

5、(currenttime) char(currentdate+12hours)將日期或時間值與其它文本相銜接,那么需要先將該值轉(zhuǎn)換成字符串har(currentdate) char(currenttime) char(currentdate+12hours)TIMESTAMP(2002-10-20-.000000) TIMESTAMP(2002-10-2012:00:00) DATE(2002-10-20) DATE(10/20/2002) TIME(12:00:00) TIME()要將字符串轉(zhuǎn)換成日期或時間值TIMESTAMP(2002-10-20-.000000) TIMESTAMP(20

6、02-10-2012:00:00) DATE(2002-10-20) DATE(10/20/2002) TIME(12:00:00) TIME()Coalesce(arg1,arg2.)返回參數(shù)集中第一個非null參數(shù)。insert(arg1,pos,size,arg2)返回一個,將arg1從pos處刪除size個字符,將arg2插入該位置。left(arg,length)返回arg最左邊的length個字符串。locate(arg1,arg2,)在arg2中查找arg1第一次出現(xiàn)的位置,指定pos,則從arg2的pos處開始找arg1第一次出現(xiàn)的位置。posstr(arg1,arg2)返回a

7、rg2第一次在arg1中出現(xiàn)的位置。repeat(arg1 ,num_times)返回arg1被重復(fù)num_times次的字符串。replace(arg1,arg2,arg3)將在arg1中的所有arg2替換成arg3。right(arg,length)返回一個有arg左邊length個字節(jié)組成的字符串。space(arg)返回一個包含arg個空格的字符串。substr(arg1,pos,)返回arg1中pos位置開始的length個字符,如果沒指定length,則返回剩余的字符。coalesce空值處理函數(shù)select coalesce(comm,1000) from staff; Orac

8、le: select nvl(null,aaa) from dual;ltrim(rtrim( abc )默認去掉兩端空格select ltrim(rtrim( abc ) from sysibm.sysdummy1ltrim( abc )只去掉左端空格select ltrim( abc ) from sysibm.sysdummy1rtrim( abc )只去掉右端空格select rtrim( abc ) from sysibm.sysdummy1upper(abc)或ucase(abc)回字符串大寫值,select upper(abc) from sysibm.sysdummy1|或co

9、ncat合并字符串select concat(abcd,efg) from sysibm.sysdummy1select abcd | efg from sysibm.sysdummy1Ceil(arg)返回大于或等于arg的最小整數(shù)。Floor(arg)返回arg1除以arg2的余數(shù),符號與arg1相同Mod(arg1,arg2)返回arg1除以arg2的余數(shù),符號與arg1相同。Rand()返回1到10之間的隨機數(shù)。Power(arg1,arg2)返回arg1的arg2次方Round(arg1,arg2)四舍五入截斷處理,arg2是位數(shù),如果arg2為負,則對小數(shù)點前的數(shù)做四舍五入處理。t

10、runcate(arg1,arg2)截斷arg1,arg2是位數(shù),如果arg2是負數(shù),則保留arg1小數(shù)點前的arg2位。 來源:考試大-Oracle認證考試二、DB2和Oracle的 SQL寫法的主要區(qū)別1、數(shù)據(jù)類型轉(zhuǎn)換函數(shù) 整型轉(zhuǎn)字符型字符串轉(zhuǎn)整形字符串轉(zhuǎn)浮點型浮點型轉(zhuǎn)字符串字符串轉(zhuǎn)日期字符串轉(zhuǎn)時間戳日期轉(zhuǎn)字符串ORACLEto_char(1)to_number(1)to_number(1.1)to_char(1.1)to_date(2007-04-26,yyyy-mm-dd)to_date(2007-04-26 08:08:08,YYYY-MM-DD HH24:MI:SS)to_char

11、(to_date(2007-04-29,yyyy-mm-dd),yyyy-mm-dd) DB2char(1)int(1)double(1.1)char(1.1)date(2007-04-26)to_date(2007-04-26 08:08:08,YYYY-MM-DD HH24:MI:SS)char(date(2007-04-29)兼容寫法cast(1 as char)cast(1 as int)無無無兼容無2、Where條件弱類型判斷oracle: where 字符型字段 in (整形) 是允許,DB2不允許select abc from dual where 1 in (1) 在oracl

12、e下可通過select abc from sysibm.sysdummy1 where 1 in (1) 在DB2下報錯 oracle:where 字符型字段=數(shù)字型字段 允許,DB2不允許select abc from dual where 1=1 在oracle下可通過select abc from sysibm.sysdummy1 whre 1=1 在DB2下報錯3、replace關(guān)鍵字oracle支持,DB2不支持 create or replace語句在DB2下是非法的4、子查詢別名ORACLE 支持select * from(select 1 from dual) 或者 selec

13、t * from(select 1 from dual) tDB2 支持select * from(select 1 from sysibm.sysdummy1) t 或者 select * from(select 1 from sysibm.sysdummy1) as t固兼容的寫法是select * from(子查詢) t5、DATE數(shù)據(jù)類型的區(qū)別ORACLE中DATE型也是帶有時分秒的,但DB2下DATE只是年月日,如2007-04-28,且可作為字符串直接操作,DB2中要記錄時分秒必須采用TIMESTAMP型一個采用hibernate后常見的兼容問題是:如果在映射文件中定義了某個字段為

14、Date型 則在DB2下,此字段必須定義為timestamp,而不能定義成DATE,不然會報出字符串右截斷的錯誤對于DB2來說,在查詢條件中可以直接用字符串指定日期或時間戳類型字段的值,例如 where create_date = 2007-04-26 、where create_timestamp = 2007-04-26 08:08:08 ,無須使用字符串轉(zhuǎn)日期函數(shù)6、分頁的處理如果采用JDBC分頁的話,注意rownum在DB2中不受支持,比如從masa_area表中取得area_id最小的10條記錄,語句分別如下,注意這里的別名t書寫方法ORACLE: select t.* from (

15、select rownum as r1 ,masa_area.* from masa_area order by area_id) t where t.r1=10DB2: select t.* from (select rownumber() over() as r1 ,masa_area.* from masa_area order by area_id) t where t.r1=107、decode函數(shù)decode函數(shù)在DB2不被支持,兼容的寫法是采用case when8、NVL函數(shù)nvl寫法在DB2不被支持,兼容的寫法是采用coalesceORACLE: select NVL(f_ar

16、eaid,空) from masa_user 等同于 select coalesce(f_areaid,空,f_areaid) from masa_userDB2: select coalesce(f_areaid,空,f_areaid) from masa_user9、substr的不同DB2 substr舉例如下:masa_group表的f_groupCode字段定義成VARCHAR(100),所以下面這個語句不會出錯,如果是substr(f_groupCode,1,101)就出錯了select * from masa_group where substr(f_groupCode,1,50

17、) = 001006 order by f_groupcode在DB2下無錯,但是select * from masa_group where substr(001006, 1, 50) = 001006 order by f_groupcode就報錯,說第三個參數(shù)超限這是因為001006已經(jīng)定義為一個長度為6的charater了這點和ORACLE有很大不同,請大家注意如果是要從第一位取到最后一位,穩(wěn)妥的辦法是不要加第三個參數(shù)ORACLE:select substr(123456,1) from dualDB2:select substr(123456,1) from sysibm.sysdu

18、mmy1都沒有問題10、獲取操作系統(tǒng)當前日期ORACLE SysdateDB2 CURRENT DATE11、增加列:相同alter table test add mail varchar(128);12、刪除列:oracle 與mysql相同:alter table test drop column mail;db2 :不提供刪除列功能(解決辦法是刪除表,重建)13、更改列名oracle : alter table test rename column mail to mail2;mysql : alter talbe test change mail mail2 varchar(128);

19、db2 : 不提供更改列名功能(解決辦法同刪除,或者通過建立一個新視圖解決)14、更改列類型oracle :alter table test modify column (mail2 integer);mysql :alter table test modify column mail2 integer;db2 :alter table test alter mail varchar(256) 只可以加寬,不能更改類型15、更改列的限制(主鍵、非空)db2 :alter table test alter mail null/not null;mysql :alter table test mo

20、dify mail2 varchar(29) not null;oracle:alter table test modify mail2 null/not null;三、常用命令 1、建立表 create table zjt_tables as (select * from tables) definition only; create table zjt_views as (select * from views) definition only; 2、插入記錄 insert into zjt_tables select * from tables; insert into zjt_view

21、s select * from views; 3、建立視圖 create view V_zjt_tables as select tabschema,tabname from zjt_tables; 4、建立觸發(fā)器 CREATE TRIGGER zjt_tables_del AFTER DELETE ON zjt_tables REFERENCING OLD AS O FOR EACH ROW MODE DB2SQL Insert into zjt_tables1 values(substr(o.tabschema,1,8),substr(o.tabname,1,10) 5、 建立唯一性索引

22、CREATE UNIQUE INDEX I_ztables_tabname ON zjt_tables(tabname); 6、查看表 select tabname from tables where tabname=ZJT_TABLES; 7、 查看列 select SUBSTR(COLNAME,1,20) as 列名,TYPENAME as 類型,LENGTH as 長度 from columns where tabname=ZJT_TABLES; 8、查看表結(jié)構(gòu) db2 describe table user1.department db2 describe select * from

23、user.tables 9、查看表的索引 db2 describe indexes for table user1.department 10、 查看視圖 select viewname from views where viewname=V_ZJT_TABLES; 11、查看索引 select indname from indexes where indname=I_ZTABLES_TABNAME; 12、 查看存貯過程 SELECT SUBSTR(PROCSCHEMA,1,15),SUBSTR(PROCNAME,1,15) FROM SYSCAT.PROCEDURES; 13、類型轉(zhuǎn)換(c

24、ast) ip datatype:varchar select cast(ip as integer)+50 from log_comm_failed四、數(shù)據(jù)類型DB2內(nèi)置數(shù)據(jù)類型可以分成數(shù)值型(numeric)、字符串型(character string)、圖形字符串(graphic string)、二進制字符串型(binary string)或日期時間型(datetime)。還有一種叫做 DATALINK 的特殊數(shù)據(jù)類型。DATALINK 值包含了對存儲在數(shù)據(jù)庫以外的文件的邏輯引用。1、數(shù)值型數(shù)據(jù)類型 包括 SMALLINT、INTEGER、BIGINT、DECIMAL(p,s)、REAL

25、 和 DOUBLE。所有數(shù)值都有符號和精度。精度是指除符號以外的二進制或十進制的位數(shù)。如果數(shù)字的值大于等于零,就認為符號為正。*小整型,SMALLINT:小整型是兩個字節(jié)的整數(shù),精度為 5 位。小整型的范圍從 -32,768 到 32,767。*大整型,INTEGER 或 INT:大整型是四個字節(jié)的整數(shù),精度為 10 位。大整型的范圍從 -2,147,483,648 到 2,147,483,647。*巨整型,BIGINT:巨整型是八個字節(jié)的整數(shù),精度為 19 位。巨整型的范圍從 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。*小數(shù)

26、型,DECIMAL(p,s)、DEC(p,s)、NUMERIC(p,s) 或 NUM(p,s):小數(shù)型的值是一種壓縮十進制數(shù),它有一個隱含的小數(shù)點。壓縮十進制數(shù)將以二-十進制編碼(binary-coded decimal,BCD)記數(shù)法的變體來存儲。小數(shù)點的位置取決于數(shù)字的精度(p)和小數(shù)位(s)。小數(shù)位是指數(shù)字的小數(shù)部分的位數(shù),它不可以是負數(shù),也不能大于精度。最大精度是 31 位。小數(shù)型的范圍從 -10*31+1 到 10*31-1。*單精度浮點數(shù)(Single-precision floating-point),REAL:單精度浮點數(shù)是實數(shù)的 32 位近似值。數(shù)字可以為零,或者在從 -3.

27、402E+38 到 -1.175E-37 或從 1.175E-37 到 3.402E+38 的范圍內(nèi)。*雙精度浮點數(shù)(Double-precision floating-point),DOUBLE,DOUBLE PRECISION 或 FLOAT:雙精度浮點數(shù)是實數(shù)的 64 位近似值。數(shù)字可以為零,或者在從 -1.79769E+308 到 -2.225E-307 或從 2.225E-307 到 1.79769E+308 的范圍內(nèi)。2、字符串 是字節(jié)序列。字符串包括 CHAR(n) 類型的定長字符串和 VARCHAR(n)、LONG VARCHAR 或 CLOB(n) 類型的變長字符串。字符串的

28、長度就是序列中的字節(jié)數(shù)。*定長字符串,CHARACTER(n) 或 CHAR(n):定長字符串的長度介于 1 到 254 字節(jié)之間。如果沒有指定長度,那么就認為是 1 個字節(jié)。*變長字符串,VARCHAR(n)、CHARACTER VARYING(n) 或 CHAR VARYING(n):VARCHAR(n) 類型的字符串是變長字符串,最長可達 32,672 字節(jié)。*LONG VARCHAR:LONG VARCHAR 類型的字符串是變長字符串,最長可達 32,700 字節(jié)。*字符大對象字符串(Character Large Object String),CLOB(nK|M|G):CLOB 是變

29、長字符串,最長可以達到 2,147,483,647 字節(jié)。如果只指定了 n,那么 n 的值就是最大長度。如果指定了 nK,那么最大長度就是 n*1,024(n 的最大值為 2,097,152)。如果指定了 nM,那么最大長度就是 n*1,048,576(n 的最大值為 2,048)。如果指定了 nG,那么最大長度就是 n*1,073,741,824(n 的最大值是 2)。CLOB 用于存儲基于大單字節(jié)字符集(single-byte character set,SBCS)字符的數(shù)據(jù)或基于混合(多字節(jié)字符集(MBCS)和 SBCS)字符的數(shù)據(jù)。圖形字符串是表示雙字節(jié)字符數(shù)據(jù)的字節(jié)序列。圖形字符串包

30、括類型為 GRAPHIC(n) 的定長圖形字符串和類型為 VARGRAPHIC(n)、LONG VARGRAPHIC 和 DBCLOB(n) 的變長圖形字符串。字符串的長度就是序列中雙字節(jié)字符的數(shù)目。*定長圖形字符串,GRAPHIC(n):定長圖形字符串的長度介于 1 到 127 個雙字節(jié)字符之間。如果沒有指定長度,就認為是 1 個雙字節(jié)字符。*變長圖形字符串,VARGRAPHIC(n):VARGRAPHIC(n) 類型的字符串是變長圖形字符串,最大長度可達 16,336 個雙字節(jié)字符。*LONG VARGRAPHIC:LONG VARGRAPHIC 類型的字符串是變長圖形字符串,最大長度可達

31、 16,350 個雙字節(jié)字符。*雙字節(jié)字符大對象字符串,DBCLOB(nK|M|G):雙字節(jié)字符大對象是變長雙字節(jié)字符圖形字符串,最長可達 1,073,741,823 個字符。如果只指定了 n,那么 n 就是最大長度。如果指定了 nK,那么最大長度就是 n*1,024(n 的最大值為 1,048,576)。如果指定了 nM,那么最大長度就是 n*1,048,576(n 的最大值為 1,024)。如果指定了 nG,那么最大長度就是 n*1,073,741,824(n 的最大值是 1)。DBCLOB 用于存儲基于大 DBCS(雙字節(jié)字符集,double-byte character set)字符的

32、數(shù)據(jù)。二進制字符串是字節(jié)序列。二進制字符串包括 BLOB(n) 類型的變長字符串,它用于容納非傳統(tǒng)型的數(shù)據(jù),諸如圖片、語音或混合媒體等,還可以容納用戶定義的類型及用戶定義的函數(shù)的結(jié)構(gòu)化數(shù)據(jù)。* 二進制大對象,BLOB(nK|M|G):二進制大對象是變長字符串,最長可達 2,147,483,647 字節(jié)。如果只指定了 n,那么 n 就是最大長度。如果指定了 nK,那么最大長度就是 n*1,024(n 的最大值為 2,097,152)。如果指定了 nM,那么最大長度就是 n*1,048,576(n 的最大值為 2,048)。如果指定了 nG,那么最大長度就是 n*1,073,741,824(n 的

33、最大值是 2)。3、日期時間型數(shù)據(jù)類型包括 DATE、TIME 和 TIMESTAMP。日期時間值可在某些算術(shù)和字符串操作中使用,而且兼容某些字符串,但它們既不是字符串,也不是數(shù)字。*DATE:DATE 是一個由三部分組成的值(年、月和日)。年份部分的范圍是從 0001 到 9999。月份部分的范圍是從 1 到 12。日部分的范圍是從 1 到 n,其中 n 的值取決于月份。DATE 列長 10 個字節(jié)。*TIME:TIME 是一個由三部分組成的值(小時、分鐘和秒)。小時部分的范圍是從 0 到 24。分鐘和秒部分的范圍都是從 0 到 59。如果小時為 24,分鐘和秒的值都是 0。TIME 列長

34、8 個字節(jié)。*TIMESTAMP:TIMESTAMP 是一個由七部分組成的值(年、月、日、小時、分鐘、秒和微秒)。年份部分的范圍是從 0001 到 9999。月份部分的范圍是從 1 到 12。日部分的范圍是從 1 到 n,其中 n 的值取決于月份。小時部分的范圍是從 0 到 24。分鐘和秒部分的范圍都是從 0 到 59。微秒部分的范圍是從 000000 到 999999。如果小時是 24,那么分鐘值、秒的值和微秒的值都是 0。TIMESTAMP 列長 26 個字節(jié)。日期時間值的字符串表示:盡管 DATE、TIME 和 TIMESTAMP 的值的內(nèi)部表示對用戶是透明的,日期、時間和時間戳記也可以用字符串來表示,CHAR 標量函數(shù)(請參閱 SQL 的“詞類(parts of speech)”)可以用于創(chuàng)建日期時間值的字符串表示。*日期值的字符串表示是一個以數(shù)字開始,長度不少于 8 個字符的字符串。日期值的月份和日部分中前面的零可以省略。*時間值的字符串表示是以數(shù)字開頭,長度不少于 4 個字符的字符串。時間值的小時部分前面的零可以省略,秒部分可以完全省略。如果秒的值沒有指定,那么就認為是 0。*時間戳記值的字符串表示是以數(shù)字開頭,長度不少于 16 個字符的字符串。完整的時間戳記字符串表示形式為 yyyy-mm-dd-hh.mm.ss.nnnnnn。時間戳記

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論