Oracle 切换postGreSql遇到的问题

 

1.不支持decode

Cause: org.postgresql.util.PSQLException: ERROR: function decode(numeric, integer, integer, integer, integer, integer) does not exist

使用case when语句来替换

用法:

case 列名

when   条件值1   then  选项1

when   条件值2    then  选项2.......

else     默认值      end

2.不能获取sequence

解决方案:

nextval('seq_test')

3.sysdate对象不存在

解决方案:

更改为now()

4.NVL函数不存在

修改NVL方法为coalesce方法

5.分页方法rownum不存在

limit offset替换

6.不支持 !=- 的查询语法

修改为<>

7.数据库字段是numeric的模糊查询

将模糊查询字段转成string类型,;例如:and cast(gw.merchant.merNo as varchar(10)) LIKE ?

8.oracle中用的blob类型的问题

系统中有用blob类型存文件的地方,postgre没有blob类型,应使用bytea类型,java中用byte[]对应。将文件存到bytea类型字段中的方法如下:

File file = new File("……");
InputStream fis = new FileInputStream(file);
pst.setBinaryStream(1, fis, file.length());

9.使用trunc函数截取timestamp的年月日

postgre没有trunc函数,要截取时间戳的年月日,可以使用如下写法:

(tr_datetime ::timestamp::date)

10.postgre没有to_char函数

  修改成(tr_amount ::TEXT)

11.to_date函数的问题

oracle的to_date要换成postgre的to_timestamp,如下:

select to_timestamp( '2020-08-18 23:59:59', 'yyyy-mm-dd hh24:mi:ss' );

12.sysdate函数做加减法的问题

改法如下:

oracle:    sysdate - 20/24/60

postgre: select now() - (20 || 'min')::interval as beforeTime;

13.update语句需要去掉表别名

14.substr(param, begin, end)函数表示对param进行截取,从begin开始到end结束,例如:

 select SUBSTR(1.23,1,3) from dual;

表示从第一位开始截,截取3位,截取的结果是:1.2

oracle中该函数的param可以是数字也可以是字符串,postgre中该函数不支持数字,可以先将数字转成字符串,如下:

select SUBSTR(1.23 :: TEXT,1,3) ;

15.oracle listagg()函数

listagg(args1, args2)函数表示将args1值相同的多行合并成一行,用args2做拼接符,如下:

SELECT tr.tr_gw_no,

listagg(tr.tr_status, ',') WITHIN GROUP(ORDER BY tr.tr_status) status

FROM aaa  tr

16.mybatis别名问题

在别名前加上 AS 关键字

17.不适配(+)写法

使用 Left(righ) join 的方式连接表

18.不支持nvarchar2

换成varchar

19.不支持instr函数

换成strpos

 

 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值