Oracle 与 MySQL 的差异分析(5):字符串函数
1 字符串连接
1.1 Oracle
select name || ‘hello’ from test;
select concat(name, score) from test;
Oracle 中一般使用 || 拼接字符串。
1.2 MySQL
select concat(name, sorce) from test;
MySQL 的concat 支持多个参数,而 Oracle 只支持两个参数;MySQL 的 concat 如果参数为 null,则结果为 null,而 Oracle 不是。
select concat_ws(‘_’, ‘abc’, ‘ddd’, ‘eee’);
concat_ws 的第一个参数是拼接的分隔符,后面是任意多个字符串。
2 字符串截取
2.1 Oracle
select substr(‘abcd’, 2, 1) from dual;
参数1:待截取字符串;
参数2:起始位置,从1开始,如果为负数,那么从右往左数;
参数3(可选):截取长度,为空时截取到最后一个字符。
2.2 MySQL
select substring(‘abcd’, 2, 1);
使用方法与 Oracle 的 substr 相同。
除了 substring,MySQL 还可以用 left 和 right 返回左边或右边 N 个字符:
select left(‘Abcdef’, 2);
select right(‘Abcdef’, 2);
3 判断字符串 A 是否包含字符串 B
3.1 Oracle
select instr(‘abcd’, ‘bc’) from dual;
返回结果如果0,表示不存在,否则表示在第一个字符串中的位置,从1开始。
它还有2个可选参数:从第几个字符开始查找和查找第几次出现的位置,默认都为1。
3.2 MySQL
select instr(‘abcd’, ‘bc’);
用法与 Oracle 相同,不过只支持两个参数。
4 字符串替换
4.1 Oracle
select replace (‘abcdef’, ‘bcd’, ‘ijklmn’) value from dual;
4.2 MySQL
select replace (‘abcdef’, ‘bcd’, ‘ijklmn’);
二者用法相同,不过 Oracle 支持不传第三个参数,表示把第二个字符串删除,而 MySQL 不支持这种用法,如果想实现这个能力,可以把第三个参数设为空字符串(不是null):
select replace (‘abcdef’, ‘bcd’, ‘’);
MySQL 还支持按照位置替换,如下表示把 ’abcdef’ 从第二个字符开始的第三个字符替换为 ‘dd’:
select insert (‘abcdef’, 2, 3, ‘dd’);
5 大小写转换
upper (‘Abcdef’)
lower (‘Abcdef’)
二者用法相同。
6 字符串填充
lpad (‘abc’, 10, ‘0’)
rpad (‘abc’, 10, ‘0’)
二者用法相同,lpad 为左填充,rpad 为右填充;三个参数的意义分别为:要填充的字符串,填充后的长度,填充的字符串。
7 去除字符串的空格
trim (‘ abc ’)
ltrim (‘ abc ’)
rtrim (‘ abc ’)
二者用法相同,trim 去除头尾的空格,ltrim 去除左侧的空格,rtrim去除右侧的空格。
8 返回字符串重复N遍的结果
select repeat (‘abc’, 10);
MySQL 特有的函数,返回字符串重复N遍的结果。
9 字符串 ASCII 比较
select strcmp (‘abc’, ‘dd’);
MySQL 特有的函数,如果第一个字符串小于第二个字符串,返回-1;如果相同,返回0;如果大于,则返回1。
10 获取字符串长度
10.1 Oracle
1、返回字符数:
select length (‘你好’) from dual;
2、返回字节数:
select lengthb (‘你好’) from dual;
10.2 MySQL
1、返回字节数:
select length (‘你好’);
2、返回字符数:
select char_length (‘你好’);
11 ASCII 转换
11.1 Oracle
1、获取字符的 ASCII:
select ascii (‘a’) from dual;
2、根据 ASCII获取字符:
select chr (97) from dual;
11.2 MySQL
1、获取字符的 ASCII:
select ascii (‘a’);
2、根据 ASCII获取字符:
select char (97);
注:MySQL 的 char 支持多个参数,可以返回一个字符串,而 Oracle 不支持多个参数:
select char (77, 121, 83, 81, 76);
返回值为:MySQL