您好,登錄后才能下訂單哦!
本篇內容介紹了“PostgreSQL與Oracle的sql區別有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
Oracle | PostgreSQL |
---|---|
select * from (select rownum r,e.* from emp e where rownum <=5) t where r>0; | select * from emp limit 5 offset 0; |
Oracle | PostgreSQL |
---|---|
select * from emp where rownum = 1; | select * from emp limit 1; |
Oracle | PostgreSQL |
---|---|
select rownum,t.* from emp t; | select row_number() over(), t.* from emp t; |
Oracle | PostgreSQL |
---|---|
SYSDATE | current_timestamp, current_date |
Oracle delete語句可以沒有from,pg必須要有from
Oracle | PostgreSQL |
---|---|
delete from emp where empno = xxx;
delete emp where empno = xxx | delete from emp where empno = xxx |
Oracle支持類型自動轉換,例如數字自動換換為字符串等;PG中需要顯示轉換,或者添加CAST
PostgreSQL在from關鍵字后的子查詢必須要有別名,Oralce可以沒有。
PG having語句必須在group by之后,oracle可以在group by之前
Oracle中使用start with … connect by…, PG中使用with recusive
Oracle | PostgreSQL |
---|---|
select * from larearrelation where rearedgens = 1 and rearflag = 1 and rearlevel = ‘01’ connect by prior agentcode = rearagentcode start with rearagentcode = ‘10032226’; | with recursive rs as ( select * from larearrelation where rearagentcode = ‘10032226’ union all select a. from larearrelation a, rs where a.rearagentcode = rs.agentcode ) select * from rs where rearedgens = 1 and rearflag = ‘1’ and rearlevel = ‘01’ |
postgresql中update語句時,set的字段不能有別名
Oracle | PostgreSQL |
---|---|
update emp t set t.name = ‘xxx’ where t.empno = 2 | update emp set name = ‘xxx’ where empno = 2 |
oracle日期相減自動轉換為數字,結果為相差的天數。
pg日期相減為interval類型,得到相差天數需要進行類型轉換
oracle的遞歸查詢中level表示查詢深度(或者遞歸層次),在PG中沒有此含義的關鍵字,需要自行在with recursive實現
Oracle | PostgreSQL |
---|---|
select max(level) from larearrelation where rearedgens = 1 and rearflag = 1 and rearlevel = ‘01’ connect by prior agentcode = rearagentcode start with rearagentcode = ‘10032226’; | with recursive rs as ( select larearrelation., 1 depth from larearrelation where rearagentcode = ‘10032226’ union all select a./*, rs.depth + 1 depth from larearrelation a, rs where a.rearagentcode = rs.agentcode ) select max(rs.depth) from rs where rearedgens = 1 and rearflag = ‘1’ and rearlevel = ‘01’ |
Oracle | PostgreSQL |
---|---|
select seqname.nextval from dual; | select nextval(‘seqname’) |
Oralce外連接支持使用 (+), PostgreSQL需使用left jion或者right join標準sql語法
oracle支持unique關鍵字去重復,pg中只能使用distinct
Oracle | PostgreSQL |
---|---|
listagg | string_agg |
Oracle | PostgreSQL |
---|---|
Minus | except |
null和’’在oracle中是一致的,最終都會存儲為null,在PG中會進行區分
Oracle中 ! =,< >操作符中間允許有空格,PG中不可以
PG中無效的別名,可以嘗試加as關鍵字,例如name
Oracle | PostgreSQL |
---|---|
SELECT REGEXP_SUBSTR(‘17,20,23’,’[^,]+’,1,1,’i’) FROM DUAL; | select (regexp_matches(‘17,20,23’, ‘[^,]+’))[1] |
oracle字段名大寫,PG字段名小寫
“PostgreSQL與Oracle的sql區別有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。