Oracle 转为 mysql 中所遇到的问题及解决方案

Oracle语句转为Mysql语句

Oracle的部分语法在Mysql中是不兼容的,本文是记录在语法转换中的一些方法心得,如有错误,还请指教。

如有补充,请评论区赐教! 持续更新中。。。

1. nvl() 方法的转化

nvl(表达式1,表达式2) : 若表达式1为空值,则返回表达式2的值,否则返回表达式1的值。

注意: 表达式1和表达式2的数据类型必须是同一个类型。

在mysql中等价方法 : ifnull(expression, alt_value)

参数描述
expression必须,要测试的值
alt_value必须,expression 表达式为 NULL 时返回的值
select nvl(stu_sex,'男') from stu_info;  #oracle

select ifnull(stu_sex, '男') from stu_info;  #mysql

2. to_char() 方法的转化

select to_char(zi_duan,'fm9999.00') from test_table;  # orcal

# 其作用也就是表示左边最小为1位(个位),最大3位(百位),有两位小数
# 在mysql中完全可以用decimal(p,m)来控制有效字数的精度,用format来保留小数点后面的位数

select format(zi_duan,2) from test_table;  #mysql

对于’fm9990.00’的说明 :

  • 0表示:如果参数(double或者float类型)存在数字就显示数字,不存在数字就显示0
  • 9表示:如果参数(double或者float类型)存在数字就显示数字,不存在数字就显示空格
  • fm表示:将9带来的空格删除

3. 对于嵌套的查询结果不能直接使用,要添加临时表再操作

举个栗子:

select count(1) as cnt from (select * from student );
# 上面这个查询语句在Oracle中是可以正常执行的,但是在MySQL中会报错

# 我们要对统计的查询结果添加临时表,才能正常执行
select count(1) as cnt from (select * from student ) tmp_table;

类似情况也是这样修改。

4. regexp_substr函数的转化

说明: 看网上说mysql 8.0版本可以使用regexp_substr函数,没去考证。但是8.0以下肯定是不能使用的。

第一步理解regexp_substr函数:

REGEXP_SUBSTR (srcstr, pattern, position, occurrence, modifier)

参数描述
srcstr需要进行正则处理的字符串
pattern进行匹配的正则表达式
position起始位置,从第几个字符开始正则表达式匹配(默认为1)
occurrence标识第几个匹配组,默认为1
modifier模式('i’不区分大小写进行检索;‘c’区分大小写进行检索。默认为’c’)

示例 :

SELECT REGEXP_SUBSTR('1,3,5','[^,]+',1,1,'i') AS str FROM test_table;  # 返回1

SELECT REGEXP_SUBSTR('1,3,5','[^,]+',1,3) AS str FROM test_table;  # 返回5

因为我遇到的sql语句 position和occurrence都为1,所以选择了 substring_index()函数

字符串截取函数: substring_index(str,delimiter, number)

参数描述
str要处理的字符串
delimiter分隔符
number如果 number 是正数,返回第 number 个字符左边的字符串。
如果 number 是负数,返回第(number 的绝对值(从右边数))个字符右边的字符串。
SELECT REGEXP_SUBSTR('1,3,5','[^,]+',1,1) AS str FROM test_table;  # 返回1 oracle

#等价于

SELECT REGEXP_SUBSTR('1,3,5',',',1) AS str FROM test_table;  # 返回1 mysql
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值