db2与oracle的sql语句有什么不同的地方呢?
导读:在这篇文章中我们会学习到关于“db2与oracle的sql语句有什么不同的地方呢?”的知识,小编觉得挺不错的,现在分享给大家,也给大家做个参考,希望对大家学习或工作能有帮助。下面就请大家跟着小编的思路一起来学习一下吧。...
在这篇文章中我们会学习到关于“db2与oracle的sql语句有什么不同的地方呢?”的知识,小编觉得挺不错的,现在分享给大家,也给大家做个参考,希望对大家学习或工作能有帮助。下面就请大家跟着小编的思路一起来学习一下吧。
区别:1、db2用“create table a like b”创建类似表,oracle用“create table a as select * from b”;2、db2用varchar类型转换,oracle用“to_char”函数转换。
本教程操作环境:Windows10系统、Oracle 11g版、Dell G3电脑。
db2与oracle的sql语句有什么区别
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 only2.快速清空大表语法
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,'0') from tablename;
(判断col3字段是否为空,不为空就输出原来的数值,为空就输出0)
DB2 :
select col1,col2,value(col3,'0') from tablename;
(mysql和Db2可以使用Coalesce(col3,'0')函数来实现上述功能)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-2012: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 t
connect by prior t.test_parent = t.test_child
start 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 all
select 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…
最后查询结果为:
| test_parent |
|---|
| son |
| father |
| grandpa |
10.数据类型有差别
比较大的差别: 1. char大小对比 Oracle: char 2000 DB2 : char 254 2. 日期类型 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 '异常' end from test 或者 select id,name, case integer(flag) when 0 then '假' when 1 then '真' else '异常' end from test
以上就是关于“db2与oracle的sql语句有什么不同的地方呢?”的相关知识,感谢各位的阅读,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注网络,小编每天都会为大家更新不同的知识。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: db2与oracle的sql语句有什么不同的地方呢?
本文地址: https://pptw.com/jishu/649993.html
