MySql和Oracle的使用

2018-10-29  本文已影响0人  明丶夷

本文档是一个记录文档,会不定时更新使用过程中遇到的差异问题
本文档记录MySql和Oracle在使用中要注意的问题,也包括两者使用上的差异问题


字符串拼接函数 CONCAT

MySql

MySqlconcat()函数可以拼接多个字符串,作用相当于Oracle中的||。在使用过程中要注意:在拼接多个字符串时:如果其中有null存在时,则拼接结果最终为null。所以在处理时,最好保证要拼接的所有字符串都不为null例:

// 三字段拼接
 CONCAT('T','ES','T') ----> 'TEST'; 
// 有NULL的情况
 CONCAT('TE',null,'ST')  ----> NULL
Oracle

Oracle也存在concat()函数,与MySql不同是只能进行两个字符串的连接,当有多个字符串拼接时非常的不方便。不过,不存在MySql中有null拼接返回null的问题。因为它的繁琐,所以在Oracle推荐使用||进行字符串拼接。例:

// 三字段拼接
CONCAT ( CONCAT('T', 'E'), 'ST') ----> 'TEST'
// 有NULL的情况
CONCAT ( 'TEST', null) ----> 'TEST'

NULL 处理

在查询数据的时候,有的数据会出现一些空值。如果我们要处理这些空值,将其替换为默认值,那么就会用到下面这些函数。

Mysql

MySql中,可使用的函数有 ifnull(expr1,expr2) 以及 if(expr1,expr2,expr3)

 // ifnull 函数
 ifnull('测试', '有值')   -----> '有值'
 ifnull(null, '无值')  -----> '无值'
 // if 函数
 if('测试', '值1', '值2')   -----> '值1'
 if(null, '值1', '值2')   -----> '值2'
Oracle

Oracle中,可使用的函数有 NVL(expr1,expr1) 以及 NVL2(expr1,expr2,expr3)

 // NVL 函数
 nvl('测试', '有值')   -----> '有值'
 nvl(null, '无值')   -----> '无值'
 // NVL2 函数
 nvl2('测试', '值1', '值2')  -----> '值1'
 nvl2(null, '值1', '值2')   -----> '值2'

获取字符串长度

Mysql(5.0及以上版本)

获取字符串长度有两个函数 length(expr)char_length(expr)

// UTF8 编码下
length('123456')   -----> 长度为 6
char_length('123456')   -----> 长度为6

length('helle世界')   -----> 长度为 11
char_length('hello世界')   -----> 长度为 7
Oracle

同样有两个函数 length(expr)lengthb(expr)。不同的是 length(expr) 计算字符数,而lengthb(expr)计算字节数

// UTF8 编码下
length('123456')   -----> 长度为 6
lengthb('123456')   -----> 长度为6

length('hello世界')   -----> 长度为 7
lengthb('helle世界')   -----> 长度为 11

截取字符串

MySql

MySql 中常用的字符串截取函数如下:

// left
left('abcde', 2)  ----> ab
// right
right('abcde', 3)  ----> cde
// substr
substr('abcde', 3, 2) ----> cd
substr('abcde', 3)  ----> cde
substr('abcde', -4, 3)  ----> bcd
// substring_index
substring_index('a*b*c*d*e', '*', 2) -----> 'a*b'
substring_index('a*b*c*d*e', '*', -3) -----> 'c*d*e'
Oracle

Oracle 中字符串截取用到的函数有 substrinstr 这两个,经常一起搭配使用

// substr
substr('abcde', 3, 2)  ----> cd
substr('abcde', -2, 3)  ----> de 因剩余长度不足 3,所以只截取到末尾

// instr
/*
* 从左边位置 2 开始计算,返回 * 第二次出现的位置
*/
instr('a*b*c*d*e', '*', 2, 2)  ----> 4
/*
* 从右边位置开始算,返回 * 第二次出现的位置
*/
instr('a*b*c*d*e', '*', -2, 2)  ----> 6

// 联合运用
/**
* instr('a*b*c*d*e*f', '*', 2, 2) ----> 4
* substr('a*b*c*d*e*f', instr('a*b*c*d*e*f', '*', 2, 2), 3) ----> substr('a*b*c*d*e*f', 4, 3)
*/
substr('a*b*c*d*e*f', instr('a*b*c*d*e*f', '*', 2, 2), 3)  ----> '*c*'
上一篇 下一篇

猜你喜欢

热点阅读