Oracle與PostgreSQL使用差異對比與總結

JDBC連接:

Oracle的jdbc連接字符串:db.url=jdbc:oracle:thin:@192.168.1.1:1521:ORCL

Postgresql的連接字符串:db.url=jdbc:postgresql:@192.168.1.1:5432/database

1、基本數據類型差異

Oracle PostgreSQL
Varchar2 varchar
number numeric
date timestamp/date/time
不支持boolean,可通過0/1代替 支持boolean
null null

2、基本函數差異

item Oracle PostgreSQL
字符串鏈接 || concat()
系統當前時間 SYSDATE

now()/CURRENT_TIMESTAMP/CURRENT_DATE/CURRENT_TIME

對時間或數字截取 trunc() trunc()/date_trunc()
to_char,to_number, 
to_date
自動格式轉換

需指定日期格式

eg:to_date(timejoin,'yyyy-MM-dd')

判空操作 nvl() coalesce()
條件判斷 decode() case...when...then
去空格 trim()/ltrim()/rtrim() trim()
字符串截取 substr() substr()
dual僞表 支持 不支持

(1)coalesce(COL1,COL2,COL3):返回參數中第一個非null字段值

例如:coalesce(COL1,0):如果COL1爲null或‘’,則返回默認值0;否則返回COL1的值;

(2)對時間或數據截取trunc

trunc(Date)的用法:
trunc(sysdate,'yyyy');//返回當前年的第一天
trunc(sysdate, 'mm');//返回當前月的第一天
trunc(sysdate, 'dd');//返回當前時間的年月日
trunc(sysdate, 'd');//返回當前星期的第一天
trunc(sysdate, 'hh');//返回當前小時
trunc(number)的用法:
trunc(55.5,-1) = 50;//-1(負數)表示從小數點左邊第一位截取後面全置爲零;
trunc(55.55,1) = 55.5;//1(正數)表示小數點後面保留一位;
trunc(55.55) = 55;//截取整數部分;

(3)條件判斷

Oracle:
  Select DECODE (payments_info,'CR','Credit','DB','Debit', null) FROM dual;
PostgreSQL:
  Select CASE
      WHEN foo = 'CR'   THEN 'Credit'
      WHEN foo = 'DB'   THEN 'Debit'
      ELSE 'default'
  END
  FROM t2;

3、DDL語法差異

更改列的數據類型

Oracle:ALTER TABLE table_name modify(column_name datatype); 

PostgreSQL:ALTER TABLE table_name ALTER column_name TYPE datatype; 

4、查詢語句差異

(1)查詢表中最新n條數據(Oracle有rownum,postgreSQL有limit

postgreSQL:

select * from olc.olc_member_intebid_info order by create_time desc limit n;

注意:limit必須用於 order by 之後

Oracle:

寫法一:select t.* from (select * from nwd.tc_inte_bid_record order by create_time desc) t where rownum <= n;

寫法二:select * from(select t.*, row_number() over(order by create_time desc) rn from nwd.tc_inte_bid_record t) where rn <=n;

上述寫法一爲通用常規寫法;寫法二可以對分組後數據排序,分組語句寫在over()中

(2)子查詢

postgresql子查詢要求比較嚴格,必須具有別名纔可以

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章