Oracle转mysql的⼀些函数替换
近期公司项⽬中需要把Oracle数据迁移到mysql中,所以⼀些写的sql不能通⽤,需要进⾏函数替换。
以下就是⾃⼰整理的⼀些sql中Oracle转mysql的替换,⽬前只整理了⼀部分,希望对⼤家有⽤
1、⽇期的替换
Oracle中通常采⽤的⽇期函数是SYSDATE,SYSTIMESTAMP(毫秒级)
mysql中需要替换为SYSDATE(),⼀定要注意mysql需要加()
sql通常也会使⽤字符串转date,或者date转字符串的情况
(1)时间转字符串
Oracle中可以使⽤to_char()函数 例如to_char(sysdate, 'yyyy-mm-dd')
mysql中需要使⽤DATE_FORMAT()函数例如DATE_FORMAT(sysdate(), '%Y-%m-%d')ui设计和网页设计区别
sql建表时限定数据范围注意:Oracle和mysql的时间格式是不⼀样的
(2)字符串转时间
Oracle中可以使⽤to_date()函数,例如to_date('2022-02-16 18:29:18','yyyy-mm-dd hh24:mi:ss')
mysql中需要使⽤str_to_date()函数,例如str_to_date('2022-02-16 18:29:18','%Y-%m-%d %H:%i:%s')
2、时间的加减
Oracle中对时间进⾏计算天数的时候可以使⽤TRUNC()函数截取
使⽤⽅式可以参考
对⽉份进⾏加减,add_months()函数 例如add_months(SYSDATE, -3) 获取前3个⽉的时间
mysql中对时间进⾏加减的话使⽤date_sub()函数
DATE_SUB(date,INTERVAL expr type) date参数是合法的⽇期表达式。expr参数是您希望添加的时间间隔 ,type 就是时间类型,⽐如天day,⽉month等等date_sub函数可以对天,⽉,年,周。。。都可以进⾏操作
例如date_sub(CURDATE(),interval 6 day) 往前获取前6天
date_sub(SYSDATE(),interval 3 month) 往前获取前3个⽉,往后获取的话改为-3即可。
swift能开发什么注意:Oracle中sysdate-1是对天数操作,mysql中sysdate()-1不是对天数操作的(知道的可以⿇烦告知下,感谢)
3、sql对数据进⾏增加分隔符
ORacle根据某字段进⾏排序后把结果集进⾏增加分隔符
listagg('需要进⾏增加分隔符的字段', ',') within group (order by '字段' DESC)
mysql中
group_concat('需要进⾏增加分隔符的字段' order by '字段' DESC separator ',' )
4、常⽤的模糊查询
mysql语句转oracleoracle
LIKE '%' || TRIM('syst') || '%'
mysql
Like concat('%',concat(TRIM('syst')),'%') concat是对字符串进⾏拼接
5、逻辑判断
Oracle
decode(fis.STATUS, '01', '正常', '02', '冻结') status=01返回正常,否则返回冻结
小程序数据库搭建mysql
(case when fis.STATUS = '01'then'正常'when '02'then'冻结' end)
6、毫秒
Oracle
SYSTIMESTAMP函数即可
mysql
STR_TO_DATE(DATE_FORMAT(SYSDATE(),'%Y-%m-%d %H:%i:%s.%f'),'%Y-%m-%d %H:%i:%s.%f')
nodejs安装在c盘好还是d盘好mysql转出来后毫秒为.000
7、在⽤in函数时,操作字符串,不是数组
Oracle
SELECT REGEXP_SUBSTR('50,55,57,43', '[^,]+', 1, ROWNUM) FROM DUAL CONNECT BY ROWNUM <=
LENGTH('50,55,57,43') - LENGTH(REGEXP_REPLACE('50,55,57,43', ',' , '')) + 1
可以将字符串通过','分隔成数组
mysql
select * from tablename where find_in_set(查询的字段,'50,55,56')
使⽤find_in_set函数,最终查询结果⼀样的,如果直接使⽤in(字符串),他只会返回查询字段=50的数据,后⾯两个不进⾏操作,可⾃⾏实践下。
注意:mysql中使⽤find_in_set函数时,字符串是','分隔才会有效
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论