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子查詢要求比較嚴格,必須具有別名纔可以