共计 2596 个字符,预计需要花费 7 分钟才能阅读完成。
本篇内容介绍了“PostgreSQL 与 Oracle 的 sql 区别有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让丸趣 TV 小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
1.rownum(1)Oracle 分页查询使用 rownum,PostgreSQL 使用 limit offsetOraclePostgreSQLselect * from (select rownum r,e.* from emp e where rownum =5) t where r select * from emp limit 5 offset 0;(2)Oracle 中 rownum=1,PostgreSQL 中使用 limit 1OraclePostgreSQLselect * from emp where rownum = 1;select * from emp limit 1;(3)Oracle 中序号列 rownum,PostgreSQL 使用窗口函数 OraclePostgreSQLselect rownum,t.* from emp t;select row_number() over(), t.* from emp t;2. 系统日期 OraclePostgreSQLSYSDATEcurrent_timestamp, current_date3.delete 语句
Oracle delete 语句可以没有 from,pg 必须要有 from
OraclePostgreSQLdelete from emp where empno = xxx;
delete emp where empno = xxxdelete from emp where empno = xxx4. 类型自动转换
Oracle 支持类型自动转换,例如数字自动换换为字符串等;PG 中需要显示转换,或者添加 CAST
5. 子查询别名
PostgreSQL 在 from 关键字后的子查询必须要有别名,Oralce 可以没有。
6. group by having
PG having 语句必须在 group by 之后,oracle 可以在 group by 之前
7. 递归查询
Oracle 中使用 start with … connect by…, PG 中使用 with recusive
OraclePostgreSQLselect *
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’8.update 语句别名
postgresql 中 update 语句时,set 的字段不能有别名
OraclePostgreSQLupdate emp t set t.name =‘xxx’where t.empno = 2update emp set name =‘xxx’where empno = 29. 日期相减
oracle 日期相减自动转换为数字,结果为相差的天数。
pg 日期相减为 interval 类型,得到相差天数需要进行类型转换
10. 递归查询中的 level
oracle 的递归查询中 level 表示查询深度(或者递归层次),在 PG 中没有此含义的关键字,需要自行在 with recursive 实现
OraclePostgreSQLselect 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’11. 序列的调用 OraclePostgreSQLselect seqname.nextval from dual;select nextval(‘seqname’)12. 外连接
Oralce 外连接支持使用 (+),PostgreSQL 需使用 left jion 或者 right join 标准 sql 语法
13.distinct 去重复
oracle 支持 unique 关键字去重复,pg 中只能使用 distinct
14. 字符串分割 OraclePostgreSQLlistaggstring_agg15. 集合相减 OraclePostgreSQLMinusexcept16.null 与”
null 和’’在 oracle 中是一致的,最终都会存储为 null,在 PG 中会进行区分
17. 不等于
Oracle 中 ! =,操作符中间允许有空格,PG 中不可以
18. 别名
PG 中无效的别名,可以尝试加 as 关键字,例如 name
19. 正则表达式 OraclePostgreSQLSELECT REGEXP_SUBSTR(‘17,20,23’,’[^,]+’,1,1,’i’) FROM DUAL;select (regexp_matches(‘17,20,23’,‘[^,]+’))[1]20. 字段大小写
oracle 字段名大写,PG 字段名小写
“PostgreSQL 与 Oracle 的 sql 区别有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注丸趣 TV 网站,丸趣 TV 小编将为大家输出更多高质量的实用文章!