专栏首页微光点亮星辰Oracle 与 MySQL 的差异分析(5):字符串函数

Oracle 与 MySQL 的差异分析(5):字符串函数

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

本文分享自微信公众号 - 微光点亮星辰(SandTower),作者:铁杆粉丝

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-05-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Oracle 与 MySQL 的差异分析(4):SQL写法

    MySQL 中字符串既可以用单引号也可以用双引号,而 Oracle 中只能用单引号。

    聚沙成塔
  • Oracle 与 MySQL 的差异分析(1):数据库结构

    在Oracle中,实例指的是数据库启动后的后台进程和内存,它和数据库是一一对应的,不过在RAC中一个数据库对应多个实例。在一个Server上一般只有一个数据库实...

    聚沙成塔
  • Oracle 与 MySQL 的差异分析(6):数值函数

    trunc (x, y),y 为返回的小数位数,如果不传y,则默认为0,返回整数。

    聚沙成塔
  • Cypress系列(22)- 可操作类型的命令 之 select()

    https://www.cnblogs.com/poloyy/category/1768839.html

    小菠萝测试笔记
  • MySQL从删库到跑路(三)——SQL语言

    SQL是结构化查询语言(Structured Query Language),是用于访问和处理数据库的标准的计算机语言。 SQL语言的功能如下: A、SQL面向...

    良月柒
  • SQL注入攻击导致BIGINT溢出错误

    首先, 溢出,通俗的讲就是意外数据的重新写入,就像装满了水的水桶,继续装水就会溢出,而溢出攻击就是,攻击者可以控制溢出的代码,如果程序的对象是内核级别的,如d...

    随心助手
  • CTF考点总结-sql注入篇

    mysql.user下有所有的用户信息,其中authentication_string为用户密码的hash,如果可以使用可以修改这个值,那么就可以修改任意用户的...

    用户2202688
  • 使用联接和子查询来查询数据

    --Chapter 3 使用联接和子查询来查询数据 --内容提要 go /* (一)、使用联接查询数据 1. 内联接 2. 外联接 3...

    赵腰静
  • 元宵快乐:看SQL大师们用SQL绘制的团圆

    题记:在多年以前,论坛活跃的时代,在ITPUB上你能看到各种新奇有趣的知识,及时新鲜的信息,出类拔萃的技巧,有很多让人多年以后还记忆犹新。 这个帖子让我忍不住在...

    数据和云
  • 元宵佳节:看Oracle技术粉们用SQL画团圆

    话团圆,画团圆,元宵佳节倍思亲,可是大家知道吗,万能的SQL可以帮助大家绘制团圆。 在ITPUB论坛里,一群SQL爱好者们会用SQL来描摹一切可能。请看如下这段...

    数据和云

扫码关注云+社区

领取腾讯云代金券