前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Oracle 与 MySQL 的差异分析(8):其他常用函数

Oracle 与 MySQL 的差异分析(8):其他常用函数

作者头像
一头小山猪
发布2020-04-10 16:22:09
1.4K0
发布2020-04-10 16:22:09
举报
文章被收录于专栏:微光点亮星辰微光点亮星辰

Oracle 与 MySQL 的差异分析(8):其他常用函数

1 NVL

1.1Oracle

nvl(a, b):如果a不为null,返回a,否则返回b。

1.2 MySQL

ifnull(a, b):如果a不为null,返回a,否则返回b。

2 DECODE/CASE

2.1Oracle

(1)decode(x,a1, b1, a2, b2, ... , an, bn):判断x,如果为a1则返回b1,如果为a2则返回b2,...,如果为an则返回bn。如果bm为传入,则返回空。表达式结果的类型由b1决定。

eg:select decode(1, 1, ‘a’, 2, ‘b’)from dual;

结果:a

(2)casex

when a1 then b1

when a2 then b2

......

else m

end;

eg:select case 1 when 1 then ‘a’when 2 then ‘b’ else ‘c’ end from dual;

结果:a

(3)casewhen 表达式1 then b1

when 表达式2 then b2

......

else m

end;

eg:select case when 1=1 then ‘a’else ‘b’ end from dual;

结果:a

2.2 MySQL

(1)MySQL中没有decode,不过可以用case代替,用法与Oracle相同。

eg:select case 1 when 1 then ‘a’ when 2then ‘b’ else ‘c’ end;

结果:a

eg:select case when 1=1 then ‘a’else ‘b’ end;

结果:a

需要注意,在case语句中null<>null,空字符串 = 空字符串。

eg:select case null when null then ‘a’else ‘b’ end;

结果:b

eg:select case ‘’ when ‘’ then ‘a’else ‘b’ end;

结果:a

(2)if(x,a, b):如果x为true则返回a,否则返回b。

eg:select if(1=1, ‘a’, ‘b’),if(1<>1, ‘a’, ‘b’), if(null, ‘a’, ‘b’);

结果:a b b

3 ROW_NUMBER()

3.1Oracle

row_number():分析函数,常用于对数据分组排序后获取序列号。

eg:select x.phonenumber,x.downtime,

row_number() over(partitionby x.phonenumber order by downtime)

from t_personallib x;

3.2 MySQL

MySQL中没有row_number() 函数,不过可以这样实现类似的功能:

set @rn=0;

set @last_country=’0’;

select name, countrycode, district,population,

if(@last_country = countrycode, @rn := @rn+1, @rn := 1) as rn,

@last_country := countrycode aslast_country

from world.city order bycountrycode, population;

4 CONNECT BY 递归查询

4.1Oracle

connect by:树形结构数据的递归查询。

eg:

select distinct categoryid fromt_sectioncategorymap

start with categoryidin

(select categoryid fromt_adminmapsection where adminid =: i_adid)

connect by prior categoryid= categoryid;

4.2 MySQL

目前没有类似函数,需要在业务中实现。

5 WM_CONCAT/LISTAGG

5.1Oracle

wm_concat/listagg:实现多行的字符串合并成一个字段。

eg:

select wm_concat(x.COLOMN_NAME) fromuser_tab_columns x

where x.TABLE_NAME=’CR_USER_INFO’;

select listagg (t.zh_description, ’#’)within group ( order by 1) from t_config t;

5.2 MySQL

group_concat:与Oracle的wm_concat功能类似,实现多行字符串的合并。

eg:

select countrycode, group_concat(name)

from world.city group bycountrycode;

使用group_concat_len系统变量,你可以设置允许的最大长度。程序中进行这项操作的语法如下,其中val是一个无符号整数:

SET [SESSION | GLOBAL]group_concat_max_len=val;

若已经设置了最大长度,则结果被截至这个最大长度。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-06-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微光点亮星辰 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档