七月 29, 2023
PostgreSQL 对 SQL 标准高度兼容,它实现的功能完全遵守于 ANSI SQL: 2008 标准。如果您正在将 Oracle 转换到 PostgreSQL,或者在开发一款通用的应用软件产品,需要同时适配 Oracle 和 PostgreSQL 的 SQL 标准,可以参考如下 SQL 转换的案例。
目录
SQL 语法
Oracle 和 PostgreSQL 都遵循 ANSI SQL 标准,也都提供了各自特有的 SQL 语法。当您从 Oracle 转换到 PostgreSQL 时,可以参考如下 SQL 转换的方案。
Oracle | PostgreSQL | 说明 |
---|---|---|
{ CONNECT BY [ NOCYCLE ] condition [ START WITH condition ] | START WITH condition CONNECT BY [ NOCYCLE ] condition } |
WITH RECURSIVE | 参考:层次查询 CONNECT BY |
使用加号 (+) 形式的外连接 | OUTER JOIN | 参考:使用加号 (+) 进行外连接 |
FROM DUAL | 创建 DUAL 视图 | 参考:DUAL 表 |
内置函数
Oracle 和 PostgreSQL 都为内置的数据类型提供了大量的函数和操作符。当您从 Oracle 转换到 PostgreSQL 时,可以参考如下内置函数转换的方案。
Oracle | PostgreSQL | 说明 |
---|---|---|
SYSDATE | now(), clock_timestamp(), current_date, current_time, current_timestamp, localtime, localtimestamp | 参考:PostgreSQL 文档中的当前日期/时间。 |
seqname.nextval | nextval(’seqname') | 参考:PostgreSQL 文档中的序列操作函数。 |
NVL(expr1 , expr2 ) |
COALESCE(value [, …]) |
|
INSTR(string , substring [, position [, occurrence ] ]) |
strpos(string , substring ) |
参考:PostgreSQL 文档中的其他字符串函数。 |
TRUNC(date [, fmt ]) |
date_trunc(field , source [, time_zone ]) |
|
DECODE(expr , search , result [, search , result ]… [, default ]) |
CASE 表达式 |
参考:DECODE 函数 |