ORACLE和DB2資料的差異(二)

2021-07-04 16:49:53 字數 4632 閱讀 4775

db2與oracle命令區別

1、取前n條記錄

oracle:select * from tablename where rownum <= n;

db2:select * from tablename fetch first n rows only;

2、取得系統日期

oracle: select sysdate from dual;

db2: select current timestamp from sysibm.sysdummy1;

3、空值轉換

oracle: select productid,loginname,nvl(cur_rate,'0') from tablename;

db2: select productid,loginname,value(cur_rate,'0') from tablename;

coalesce(cur_rate,'0')

4、型別轉換(8版有了to_char,to_date,9版新增了to_number)

oracle: select to_char(sysdate,'yyyy-mm-dd') from dual;

db2: select varchar(current timestamp) from sysibm,sysdummy1;

oracle資料型別改變函式:to_char()、to_date()、to_number()等

如果僅僅取年、月、日等,可以用to_char(sysdate,'yyyy'),to_char(sysdate,'mm'),to_char(sysdate,'dd')

只取年月日 trunc(sysdate) 取時分秒 to_char(sysdate,'hh24:mi:ss')

db2資料型別改變函式:char()、varchar()、int()、date()、time()等

取得年、月、日等寫法:year(current timestamp),month(current timestamp),day(current timestamp),

hour(current timestamp),minute(current timestamp),second(current timestamp),microsecond(current timestamp)

只取年月日可以用date(current timestamp),取時分秒time(current timestamp)

char() 是定長字串1-255 varchar()是非定常字串1-36272

日期、時間形態變為字元形態:char(current date),char(current time)

5、快速清空大表

oracle: truncate table tablename;

db2: alter table tablename active not logged initially with empty table;

6、rowid

oracle:它是由資料庫唯一產生的,在程式裡可以獲得

db2: v8也有此功能

7、to_number

oracle: select to_number('123') from dual;

db2: select cast('123' as integer) from sysibm,sysdummy1;

select cast(current time as char(8)) from sysibm,sysdummy1;

8、建立類似表

oracle: create table a as select * from b;

db2: create table a like b;

create table tab_new as select col1,col2,…… from tab_old definition only;(8版有效,9版無效)

9、decode方法

oracle:decode(條件,值1,翻譯值1,值2,翻譯值2,…… 值n,翻譯值n,預設值)

或case語句

db2:只有case語句

select id,name,

case

when integer(flag)=0 then '假'

when integer(flag)=1 then '真'

else '異常'

endfrom test

或者select id,name,

case

when 0 then '假'

when 1 then '真'

else '異常'

endfrom test

10、子查詢

oracle: 直接使用子查詢

db2:with語句

with a1 as

(select max(id) as aa1 from test)

select id,aa1 from test,al

11、資料型別

比較大的差別

oracle: char 2000 

date 

datetime

db2:char 254 

date 

time 

timestamp

12、資料型別轉換函式

整型轉字元型

字串轉整型

字串轉浮點型

浮點型轉字串

字串轉日期

字串轉時間戳

日期轉字串

oracle

to_char(1)

to_number('1')

to_number('1.1')

to_char(1.1)

to_date('2011-04-20','yyyy-mm-dd')

to_date('2011-04-20 19:28:30','yyyy-mm-dd hh24:mi:ss')

to_char(to_date('2011-04-20','yyyy-mm-dd'),'yyyy-mm-dd')

db2char(1)

int('1')

double('1.1')

char(1.1)

date('2011-04-20')

to_date('2011-04-20 19:28:30','yyyy-mm-dd hh24:mi:ss')

char(date('2011-04-20'))

相容寫法

cast(1 as char)

cast('1' as int)無無

無相容無13、where條件弱型別判斷

oracle: where 字元型字段 in(整型) 是允許

db2: 不允許

select 'abc' from dual where '1' in (1); 在oracle下可通過

select 'abc' from sysibm.sysdummy1 where '1' in (1);在db2下報錯

oracle:where 字元型字段 = 數字型字段 允許

db2: 不允許

select 'abc' from dual where '1' = 1; 在oracle下可通過

select 'abc' from sysibm.sysdummy1 where '1' = 1;在db2下報錯

14、replace關鍵字

oracle支援,db2不支援,create or replace 語句在db2中非法

15、子查詢別名

oracle:select * from (select 1 from dual);或select * from (select 1 from dual) t;

db2: select * from (select 1 from sysibm.sysdummy1) t 或 select * from (select 1 from sysibm.sysdummy1) as t;

故相容的寫法

select * from (子查詢) t;

16、date資料型別的區別

oracle中date型別是帶有時分秒的,但db2中date只是年月日,如'2011-04-20',且可作為字串直接操作,db2中要

記錄時分秒必須採用timestamp型

17、substr不同

db2:

masa_group表的f_groupcode欄位定義成varchar(100),所以下面這個語句不會出錯,如果是

是substr(f_groupcode,1,101)就報錯了

select * from masa_group where substr(f_groupcode,1,50) = '001006' order by f_groupcode;

在db2下無錯,但是

select * from masa_group where substr('001006',1,50) = '001006' order by f_groupcode;

就報錯,說第三個引數超限,這是因為『001006』已經定義成乙個長度為6的character了。

這點和oracle有很大不同,請大家注意

如果是要從第一位取到最後一位,穩妥的辦法是不要加第三個引數

oracle: select substr('123456',1) from dual;

db2: select substr('123456',1) from sysibm.sysdummy1;

**:

Oracle和DB2的部分SQLCODE對應表

最近在做oracle到db2的轉換,整理了部分sqlcode的對應關係,部分已經新增了中文描述 因為轉換的程式為pro c程式,增加了sqlcode的巨集定義 sqlcode巨集定義 oracle db2中 描述 m no data found 1403 100未能找到資料 m dup val on...

DB2和ORACLE的印象比較

乙個專案需要 db2,以前沒用過,用了windows 2008下的db29.7 好幾周,算入門了吧,下面這文章就當乙個 oracle使用者眼裡的db2的印象吧,也許有些東西可能有偏差,但是就是我自己的印象 2 管理工具,db2的管理工具做得太簡陋了,控制中心只能說能用而已,而且還有好多bug,不如o...

DB2 和 oracle 的 substr區別

db2 的 substr 方法 語法 substr arg1,pos,substr函式返回arg1中pos位置開始的length個字元,如果pos位置開始沒有字元,則返回空格 如果沒有指定length,則返回剩餘的字元。oracle 的 substr 方法 1.substr str,num1,num...