300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > db2与oracle的sql语句有什么区别

db2与oracle的sql语句有什么区别

时间:2024-02-22 23:26:20

相关推荐

db2与oracle的sql语句有什么区别

数据库|Oracle

oracle

数据库-Oracle

数据的源码下载,ubuntu8.10安装,p站爬虫账号, socket php,优化seo客服lzw

php校友录源码,ubuntu建扩展分区,爬虫抓取公众号,inculde php,seo写法技巧lzw

db2与oracle的sql语句有什么区别

php源码项目门户网站开发,ubuntu自带软件卸载,小爬虫如何消灭,php硬币,seo检测截图lzw

1.创建类似表语法

Oracle : create table a as select * from b;DB2 : create table a like b; (8版本有效,9版本无效)create table new_a as select col1,col2... from a definition only

2.快速清空大表语法

Oracle : truncate table a;DB2 :alter table a active not logged initially with empty table;

3.取前N条数据语法

Oracle : select * from a where rownum <= N;DB2 :select * from a fetch first N rows only;

4.取得系统时间语法

Oracle :select sysdate from dual;DB2 :select current timestamp from sysibm.sysdummy1;

5.空值转换方式不同

Oracle :select col1,col2,nvl(col3,) from tablename; (判断col3字段是否为空,不为空就输出原来的数值,为空就输出0)DB2 :select col1,col2,value(col3,) from tablename;(mysql和Db2可以使用Coalesce(col3,)函数来实现上述功能)

Coalesce()函数

这个函数主要用来进行空值处理,其参数格式如下: COALESCE ( expression,value1,value2……,valuen) COALESCE()函数的第一个参数expression为待检测的表达式,而其后的参数个数不定。COALESCE()函数将会返回包括expression在内的所有参数中的第一个非空表达式。如果expression不为空值则返回expression;否则判断value1是否是空值,如果value1不为空值则返回value1;否则判断value2是否是空值,如果value2不为空值则返回value2;……以此类推,如果所有的表达式都为空值,则返回NULL。

6.类型转换方式不同

oracle :select to_char(sysdate,YYYY-MM-DD HH24:MI:SS) from dual;DB2 :select varchar(current timestamp) from sysibm.sysdummy1;

解析:

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)。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-:00:00),DATE(2002-10-20),DATE(10/20/2002),TIME(12:00:00)

目前DB2 V8也支持to_char和to_date,V9版新增了to_number

7.字符串转换为日期方式不同(To_Number/cast)

Oracle:select to_number(123) from dual;select cast(123 as integer) from dual;DB2 :select cast(123 as integer) from sysibm.sysdummy1;select cast(current time as char(8)) from sysibm.sysdummy1;

8.子查询

Oracle:直接用子查询Db2:WITH语句WITH a1 AS(SELECT max(id) AS aa1 FROM test )SELECT id ,aa1 FROM test ,a1

9.递归查询(分层查询)

Oracle递归查询:CONNECT BY PRIOR ... START WITH ...DB2 递归查询:DB2较难理解,要WITH一个虚拟表

Oracle:

//从child是son的数据向上查询出所有的长辈select distinct test_parent from ( select t.test_parent from t_test tconnect by prior t.test_parent = t.test_childstart with t.test_child = son )

了解更多:Oracle分层查询(递归查询):start with…connect by prior 以及 level关键字

DB2:

// Db2递归查询写法with par_test(test_child,test_parent) as(select test_child,test_parent from t_test where child=grandchild -- 设置递归起点union allselect t.test_child,t.test_parent from par_test pt,t_test t where pt.test_parent = t.test_child ----递归的方向为从子向父)select distinct test_parent from par_test

如上图,从grandchild开始查询其所有的父节点,首先设定虚拟表起点,即左边第四行;依次往上推,其父亲是son = 上一行的child,即VT.parent = T.child…

最后查询结果为:

10.数据类型有差别

比较大的差别:1. char大小对比 Oracle: char 2000 DB2 : char 2542. 日期类型 Oracle: date datetime DB2 :date(日期) time(时间)timestamp(日期时间)

11.关于rowId

Oracle中它是由数据库唯一产生的,在程序中可以获得DB2 在V8版本才有此功能

12.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 异常 endfrom test或者select id,name,case integer(flag) when 0 then 假 when 1 then 真else 异常 endfrom test

推荐教学:《Oracle视频教学》

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。