oracle和db2的sql语句区别
<script type="text/javascript"> document.body.oncopy = function() { if (window.clipboardData) { setTimeout(function() { var text = clipboardData.getData("text"); if (text && text.length>300) { text = text + "/r/n/n本文来自优快云博客,转载请标明出处:" + location.href; clipboardData.setData("text", text); } }, 100); } } </script> <script type="text/javascript">function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>
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 HH24:MI:SS') from dual;
DB2 : select varchar(current timestamp) from sysibm.sysdummy1;
l Oracle 数据类型改变函数: to_char() 、 to_date() 、 to_number() 等;如果仅仅取年,月,日等,可以用 to_char(sysdate, 'YYYY'),to_char('MM') ,to_char('DD') 取得。只取年月日 TRUNC(SYSDATE) ,取时分秒 TO_CHAR(SYSDATE,'HH24:MI:SS') 。
l 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-32672 )日期 , 时间形态变为字符形态 : char(current date) , char(current time) 将字符串转换成日期或时间形态 :TIMESTAMP('2002-10-2012:00:00'),DATE('2002-10-20'),DATE('10/20/2002'),TIME('12:00:00')
l 目前 DB2 V8 也支持 to_char 和 to_date
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)) FROMsysibm.sysdummy1
8 、创建类似表
Oracle : create table a as select * from b ;
DB2 : create table a like b ;
CREATE TABLE tab_newAS select col1,col2 … FROMtab_old DEFINITION ONLY (8 版有效, 9 版无效 )
9 、 decode 方法
Oracle : decode 方法( 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 ‘ 异常 ’END FROM TEST 或者 SELECT id ,name , CASE integer(flag) WHEN 0 THEN ‘ 假 ’ WHEN 1 THEN ‘ 真 ’ELSE ‘ 异常 ’END FROM TEST
10 、子查询( 8 版, 9 版也支持子查询)
Oracle: 直接用子查询
Db2:with 语句 WITH a1 AS(select max(id) as aa1 from test ) select id ,aa1 from test ,a1
11 、数据类型
比较大的差别:
Oracle : char 2000
DB2: char 254
Oracle: date datetime
Db2: DATE :日期 TIME :时间 TIMESTAMP :日期时间