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