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:日期时间
from: http://hi.baidu.com/neusunly/blog/item/3867a9faaae96fdcb58f3148.html
1、数据类型转换函数
整型转字符型
字符串转整形
字符串转浮点型
浮点型转字符串
字符串转日期
字符串转时间戳
日期转字符串
ORACLE
to_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(to_date('2007-04-29','yyyy-mm-dd'),'yyyy-mm-dd')
DB2
char(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) 在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 whre '1'=1 在DB2下报错
3、replace关键字
oracle支持,DB2不支持 create or replace语句在DB2下是非法的
4、子查询别名
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
5、DATE数据类型的区别
ORACLE中DATE型也是带有时分秒的,但DB2下DATE只是年月日,如'2007-04-28',且可作为字符串直接操作,DB2中要记录时分秒必须采用TIMESTAMP型
一个采用hibernate后常见的兼容问题是:
如果在映射文件中定义了某个字段为Date型
<property name="createTime" type="java.util.Date" >
<column name="CREATE_TIME" length="7" />
</property>
则在DB2下,此字段必须定义为timestamp,而不能定义成DATE,不然会报出字符串右截断的错误
对于DB2来说,在查询条件中可以直接用字符串指定日期或时间戳类型字段的值,例如 where create_date = '2007-04-26' 、where create_timestamp = '2007-04-26 08:08:08' ,无须使用字符串转日期函数
6、分页的处理
如果采用JDBC分页的话,注意rownum在DB2中不受支持,比如从masa_area表中取得area_id最小的10条记录,语句分别如下,注意这里的别名t书写方法
ORACLE: select t.* from (select rownum as r1 ,masa_area.* from masa_area order by area_id) t where t.r1<=10
DB2: select t.* from (select rownumber() over() as r1 ,masa_area.* from masa_area order by area_id) t where t.r1<=10
7、decode函数
decode函数在DB2不被支持,兼容的写法是采用case when
8、NVL函数
nvl写法在DB2不被支持,兼容的写法是采用coalesce
ORACLE: select NVL(f_areaid,'空') from masa_user 等同于 select coalesce(f_areaid,'空',f_areaid) from masa_user
DB2: select coalesce(f_areaid,'空',f_areaid) from masa_user
9、substr的不同
DB2 substr举例如下:
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的charater了
这点和ORACLE有很大不同,请大家注意
如果是要从第一位取到最后一位,稳妥的办法是不要加第三个参数
ORACLE:select substr('123456',1) from dual
DB2:select substr('123456',1) from sysibm.sysdummy1
都没有问题
相关推荐
本文将深入探讨DB2与Oracle在应用开发中的主要差异,以帮助开发者更好地理解和选择适合其项目需求的数据库系统。 ### 数据库对象的异同 - **实例(Instance)**:在DB2和Oracle中,实例都指的是数据库管理系统运行...
DB2和Oracle是两种广泛应用的关系型数据库管理系统,它们在应用开发方面存在诸多差异。下面将对这些差异进行详细的比较。 1. **实例与数据库的区别** - Oracle中的实例(Instance)是内存结构和进程的集合,它连接...
标题中的“DB2和Oracle对比”意味着我们将探讨这两款企业级数据库管理系统——Oracle数据库和IBM的DB2——在性能、功能、成本、易用性、安全性以及市场占有率等方面的差异。 Oracle数据库是由Oracle公司开发的一款...
本文旨在探讨Oracle与DB2这两种主流关系型数据库管理系统(RDBMS)之间的关键差异。Oracle由甲骨文公司开发,而DB2则由IBM推出。两者均广泛应用于企业级环境,提供了强大的数据管理能力。下面我们将从多个方面详细对比...
在数据库管理领域,DB2和Oracle都是广泛应用的关系型数据库管理系统,它们都支持SQL语言,但具体语法和功能上存在一些差异。"DB2与ORACLE常用语句对照"的主题旨在帮助用户理解和转换这两种数据库系统中的SQL命令。...
DB2使用db2backup和db2restore命令,而Oracle则有RMAN(恢复管理器)等工具。 七、集群和高可用性 Oracle RAC(Real Application Clusters)提供了高度可用的多节点集群解决方案,而DB2也有其集群和复制技术,如DB2...
描述:本文深入解析了IBM DB2与Oracle数据库系统在体系架构上的异同,旨在为数据库管理员、架构师及IT专业人员提供深度洞察,帮助理解两种主流数据库技术的核心差异。 ### 一、DB2与Oracle的服务器结构对比 #### ...
以下是对Oracle与DB2之间主要区别的详细分析: 1. **许可证模式**: - Oracle提供多种许可证选项,包括单用户许可证、CPU许可证、基于处理器的复杂度和用户数的许可证等。这种灵活性使得Oracle能够适应不同规模的...
- **Decimal/Double/Integer/Smallint/Real**: 这些数据类型在DB2和Oracle中都可以直接使用,无需特别的转换函数。 - **Hex**: DB2提供`HEX`函数来将二进制数据转换为十六进制格式。 - **Date/Time/Timestamp**: ...
oracle与db2基本数据类型和语法的差异总结
DB2和Oracle虽然都基于SQL标准,但在具体语法、存储结构和性能优化上存在差异。例如,DB2使用的是LUW(Linux、Unix、Windows)平台,而Oracle支持多种操作系统。了解这些差异对于数据迁移至关重要。 2. 数据类型...
例如,在 DB2/400 中,我们可以使用定长的 CHAR(N)类型与 Oracle 的 VARCHAR2(n)相对应,这样可以提高效率和节省存储空间。 四、LOB 类型 DB2/400 提供 VARCHAR 和 CLOB 与 Oracle 中的 RAW 和 LONG RAW 相...
【Oracle并发控制】Oracle同样采用锁机制来控制并发,但其具体实现可能与DB2有所不同。Oracle也支持行级和表级的锁定,但具体的锁模式和兼容性矩阵可能会有差异。Oracle还提供了其他的并发控制技术,如多版本并发...
以下是对Oracle与DB2之间SQL语句差异的详细总结: #### 取前N条记录 **Oracle**: 使用`ROWNUM`来限制返回的行数。 ```sql SELECT * FROM TableName WHERE ROWNUM ; ``` **DB2**: 使用`FETCH FIRST`关键字来实现...
#### 四、DB2与Oracle的比较 **4.1 锁的类型** - **DB2**:支持更广泛的锁类型,如IS、IX、SIX、S、U、X、Z等。 - **Oracle**:虽然锁类型较少,但同样能够满足大多数应用场景的需求。 **4.2 锁的兼容性** - **...
例如,Oracle 针对 Java 语言提供了 JDBC 扩展,这与 DB2 提供的驱动在语法上存在一定的差异;有些 JDBC 接口方法,像 executeQuery 方法,DB2 只能通过这个方法执行查询操作,而 Oracle 除了查询外,还可以执行其他...
Oracle 与 DB2 的对应关系 Oracle 与 DB2 是两种常用的关系数据库管理系统,尽管它们有着不同...Oracle 与 DB2 之间存在着一定的对应关系,但它们之间也存在着一定的差异。了解这些差异对于数据库开发和移植非常重要。
### 数据库概述与DB2和Oracle的区别 #### 数据库概述 数据库系统是现代信息技术的核心组成部分,用于存储、管理和检索大量数据。其中,Oracle数据库和IBM的DB2是两种广泛使用的数据库管理系统(DBMS),它们各自拥有...
#### 一、Oracle SQL PL与DB2 inline SQL PL对比 本章节主要介绍Oracle SQL PL与DB2 inline SQL PL之间的对比,包括但不限于存储过程、触发器、用户定义函数(UDF)、条件语句及流程控制等。 ##### 1.1 创建存储...