本文档是一个记录文档,会不定时更新使用过程中遇到的差异问题

本文档记录MySql和Oracle在使用中要注意的问题,也包括两者使用上的差异问题

字符串拼接函数 CONCAT

MySql

MySql的 concat()函数可以拼接多个字符串,作用相当于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(expr1,expr2):若 expr1 为 null,则返回 expr2

if(expr1,expr2,expr3):若表达式 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(expr1,expr1):若 expr1 为 null,则返回 expr2

NVL2(expr1,expr2,expr3):若表达式 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)

length(expr) 计算的是字符串所占的字节数。即数字和字母算一个字节,而汉字在不同的编码格式下占的字节数不同。UTF8 编码下,汉字占 3~4 个字节(一般的占3个,中日韩超大字符集的占4个),GBK编码下占 2 个字节。

char_length(expr)计算的是所占的字符数,即汉字,字母,数字都是算一个字符。

可以利用 char_length(expr) = 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(str, length):从左开始。截取 length 个字符返回

right(str,length):从右开始。截取 length 个字符返回

substr(str,start,length):从左开始。以 start 为起始位,截取 length 个字符返回。(length可省略,省略情况下以 start 为起始位,返回剩余全部字符)

start 的取值可以是负值,此情况下 start 计算从右边开始

substr 函数还有其他的变种,这里不再详细描述,可自行了解

substring_index(str,delimiter,number):返回 str 中第 number 个出现的分隔符 delimiter 之前的子字符串。

当 number 是正数,计算和截取方式从左边开始算 ---> 即左为前

当 number 是负数,计算和截取方式从右边开始算 ---> 即右为前

// 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 中字符串截取用到的函数有 substr 和 instr 这两个,经常一起搭配使用

substr(str, start, [length]):从 start 位置开始,截取 length 个字符组成的子串并返回。

length 是可选值。

start 可为正也可为负。当 start 为负数时,其计算从右边(末尾)开始

instr(str, child_str, [start], [show_time]):返回 child_str 子串在源串 str 中的位置

start 可选值。默认为 1,从左往右检索。为负数时,从右往左检索

show_time 可选值。子字符串在第几次出现在源字符串中。默认为 1。

// 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*'

mysql中if在oracle怎么用_MySql和Oracle的使用相关推荐

  1. mysql中if在oracle怎么用_mysql和oracle的mybatis操作

    1.Oracle.MySQL插入时返回下一个主键的操作 Xml代码 Oracle: SELECT SEQ_ROLE.NEXTVAL AS ID FROM DUAL insert into ROLE(I ...

  2. mysql中可以用to_char函数吗_mySQL中 实现Oracle 的to_char函数

    mySQL中 实现Oracle 的to_char函数,应该可以实现80%的兼容 REPLACE函数是区分大小的 DROP FUNCTION IF EXISTS `to_char`; CREATE DE ...

  3. mysql里条件语句和循环语句_MySQL与Oracle 差异比较之四条件循环语句

    循环语句 编号 类别 oracle Mysql 注释 1 IF语句使用不同 IFiv_weekly_day = 'MON'THEN ii_weekly_day := 'MON'; ELSIFiv_we ...

  4. mysql优于oracle的地方_MYSQL转为ORACLE要注意的地方

    MYSQL转为ORACLE要注意的地方: 1.自动增长的数据类型处理 MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值.ORACLE没有自动增长的数据类型,需要建立一个自动增 ...

  5. mysql中 唯一约束的关键字是_mysql的约束

    在mysql设计表中,有个概念叫做约束 什么是约束 约束英文:constraint 约束实际上就是表中数据的限制条件 约束种类 mysql的约束大概分为以下几种:非空约束(not null) 唯一性约 ...

  6. mysql+中与当前时间比较大小_Mysql中时间加减和比较大小的方法

    在Oracle中使用时间函数to_date习惯了,在Oracle中时间的加减也非常简单,直接加减即可.在Mysql中时间的函数很多,非常自由. 在项目中经常用到的就是时间的加减. 比如60天前,Ora ...

  7. mysql 中存储引擎是什么意思_mysql常用的存储引擎是什么

    mysql常用的存储引擎是什么 发布时间:2020-12-02 09:35:04 来源:亿速云 阅读:62 作者:小新 这篇文章将为大家详细讲解有关mysql常用的存储引擎是什么,小编觉得挺实用的,因 ...

  8. mysql 中如何删除重复的数据_mysql如何快速删除重复的数据

    在mysql中去重,其实是一个很简单的事情,来看下面的例子: mysql> DROP TABLE test; Query OK, 0 rows affected (0.01 sec) mysql ...

  9. mysql中创建唯一索引的关键字_mysql中唯一索引的关键字是什么

    mysql中唯一索引的关键字是unique index.创建唯一索引可以避免数据出现重复.唯一索引可以有多个,但索引列的值必须唯一,索引列的值允许有空值.创建唯一索引可以使用关键字UNIQUE随表一同 ...

最新文章

  1. BZOJ 1821 [JSOI2010] Group 部落划分 Group
  2. Linux-SFTP/SSH免密码登录
  3. bec初级第一课_在您的第一个初级开发人员工作中如何生存和发展
  4. 电脑任务管理器_Windows任务管理器突然打不开了
  5. ONNX系列三 --- 使用ONNX使PyTorch AI模型可移植
  6. CentOS _ RHEL 防止Kernel升级
  7. 为IBM 3650 M2 服务器配置RAID卡(一)
  8. 计算机达人成长之路(8)连载
  9. 如何更优雅的写for循环
  10. Java Proxy 动态代理原理剖析
  11. 分享几个手机和电脑上的百宝箱工具
  12. PCB----LayOut的一些准则
  13. 《数字图像处理》空间滤波学习感悟1:空间滤波原理
  14. Python修改图片分辨率来改变图片大小
  15. 计算几何常用的函数/方法
  16. 《钻哥带您了解产品原型》(Yanlz+Unity+XR+需求分析+核心思路+产品核心+生产流程+制作核心+销售核心+立钻哥哥+==)
  17. oracle 用户被锁住 28000 the account is locked
  18. 1、二进制安装k8s
  19. C#【汇总篇】语法糖汇总
  20. 摇一摇 微信 浏览器

热门文章

  1. SAP Spartacus打印Occ endpoint请求的url
  2. 使用关键字SCAN ABAP-SOURCE对ABAP源代码进行语法扫描
  3. 使用ABAP代码获得Netweaver环境变量
  4. Could not open app - SAP UI5 error message
  5. configurations in Gateway hub system
  6. When is abap.js loaded by Launchpad
  7. 如何获得github的oauth access token
  8. 如何解决SAP Structure CMST_SI_ENQ的DDIC_TYPE_INCONSISTENCY问题
  9. SAP CRM WebClient UI WebUI Runtime repository design
  10. SAP cloud platform 504 gateway time out Cloud connector