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...