Postgresql与Oracle区别

一、数据类型转换和常用函数替换方案

(1)数据类型转换 ora --> pgsql

  1. CHAR(n) --> CHAR(n)
  2. VARCHAR2(n) --> varchar(n)
  3. NUMBER(n, m) --> NUMERIC(n, m)
  4. NUMBER(4) --> SMALLINT
  5. NUMBER(9) --> INT
  6. NUMBER(18) --> BIGINT
  7. NUMBER(n) --> NUMERIC(n) --如果n大于19,则可以转换为numeric类型
  8. DATE --> TIMESTAMP(0)
  9. CLOB --> TEXT
  10. BLOB --> BYTEA
  11. TIMESTAMP WITH LOCAL TIME ZONE ------>TIMESTAMPTZ

  注意:个人认为Oracle中number对应为float8(double),是浮点数,不精确,主要是oralce的number可以存小数。像费用等应该使用numeric指定精度。

(2)子查询

  Postgresql中子查询较为规范,子查询必须要取别名

  select * from (select * from test) t; --正确写法

  select * from (select * from test); --报错:subquery in from must have an alias

(3)虚表dual问题

  Postgresql中没有 dual 虚拟表,为保证兼容性,需创建伪视图(view)代替:

  create or replace view dual as

  select NULL::"unknown"  where 1=1;

(4)sysdate替换方案

  1. sysdate --> now()
  2. trunc(sysdate)  --> now()::date
  3. sysdate - ?  --> now() - (? || 'day')::interval

(5)NVL函数替换方案

  1. coalesce(arg1, arg2, arg3...)

(6)rownum替换方案

  1.  rownum < 5 改为 limit 5

 (7)guid替换方案

  sysguid() --> gen_random_uuid()

 

posted @ 2022-07-07 09:39  榛名小天使  阅读(2792)  评论(0)    收藏  举报