oracle12c版本和达梦一些函数区别问题

oracle12c版本下和达梦一些语法上的区别

最近在做达梦数据库迁移到oracle12c数据上遇到了一些问题,主要在于达梦和oracle12c版本下一些函数、函数的使用上一些区别,整理了一下,大家在使用oracle12c版本时需要注意。

1、WM_CONCAT函数

WM_CONCAT函数在oracle12c以上版本中已经抛弃,不在使用,所以使用WM_CONCAT()函数会报错,可以用listagg()列转行函数进行替换。

达梦下:wm_concat(to_char(JLMARK.DMCPT))
oracle12下:listagg(to_char(JLMARK.DMCPT),',')within group ( order by JLMARK.INPFRQ)

2、两日期相减得天数

在达梦、oracle10g版本下可以直接使用两个日期类型的字段进行相减可以直接得到天数,再用to_number()函数可区别相对应的天数,在oracle12c版本上两个日期相减得到的不是一个number类型的数值,在进行to_number()函数进行转换时会报错。

达梦下:TO_NUMBER(sysdate - createtime)
oracle12下:to_number(to_date(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss')-to_date(to_char(createtime,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss'))

在这块为啥先用to_char格式化日期,是因为直接使用to_date()函数转换时在oracle12c版本上会报错类型不一致问题,所以先用to_char()将字段类型改为一致,在进行to_date()进行转换即可。

3、listagg函数注意事项

在oracle12c版本上多条记录在进行列转行时注意如果有null值时,就会导致结果出现乱码问题,需要用to_char(字段,‘’)进行转换一下,避免出现结果乱码问题。

达梦下:listagg(name)
oracle12下:listagg(to_char(name),',')

4、nullif函数

nullif用来比较两边的值是否相等,如果两个表达式相等,NULLIF 返回空值NULL。如果两个表达式不相等,NULLIF 返回第一个 expression1 的值。在oracle12c版本上需要保持两个表达式的数据类型一致,否则报错,达梦上部分情况下不需要保持一致即可执行成功。

XZBZSY number 类型
达梦下:nullif(XZBZSY,'0')
oracle12下:nullif(XZBZSY,null)

5、日期类型需要转换

在oracle12c版本下,数据库的日期返回到controller时,如果返回对象为map接收时,将map封装成jsonObject对象时,如果日期不进行to_char()转换时,在进行封装时就会报错(net.sf.json.JSONObject cannot be cast to java.lang.String)

达梦下:CREATETIME
oracle12下:to_char(CREATETIME,'yyyy-MM-dd HH24:mi:ss')

6、concat函数

达梦环境下concat函数中参数可以为多个,在oracle12c环境下concat函数只允许将两个值连接在一起。如果需要连接多个值,那么我们可以嵌套多个CONCAT函数调用。

达梦下:CONCAT('A', 'B','C')
oracle12下:CONCAT(CONCAT('A', 'B'),'C')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农辰南

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值