序号 | 项目 | Oracle | PostgreSQL |
1 | 当前时间 | SYSDATE | 可全部使用current_timestamp替换(current_date/current_time)。now()函数也是获取当前时间,不过在事务中now表示事务开始时间,oracle的sysdate表示当前时间 |
2 | 序列 | SEQNAME.NEXTVAL | NEXTVAL('SEQNAME') |
3 | 固定值列 | SELECT '1' AS COL1 | SELECT CAST('1' AS TEXT) AS COL1 |
4 | NVL | NVL函数 | NVL可以用COALESCE函数(返回第一个非null值)替换 |
5 | 类型自动转换 | Oracle某些情况下支持类型自动转换 | 会出现类型不匹配等错误,需要在Java或者sql中进行类型转换,使类型匹配 |
6 | INSTR函数 | instr('str1','str2') | strpos('str1','str2') |
7 | 外连接 | Oracle可简写为(+) | 用LEFT JOIN等语句替换 |
8 | 层次查询 | START WITH语句 CONNECT BY语句 |
用WITH RECURSIVE语句 |
9 | 数据库对象大小写 | 不区分大小写 | 默认将sql语句中数据库对象名称转为小写,除非用双引号包裹对象名 |
10 | 同义词 | Oracle支持同义词 | 用视图代替 |
11 | DUAL | SELECT 1+1 FROM DUAL | 没有dual虚拟表,可写作SELECT 1+1或者创建视图dual CREATE VIEW dual AS SELECT current_timestamp |
12 | ROWNUM | ROWNUM关键字 | 两种情况: 1.限制结果集数量,用于翻页等: SELECT * FROM T LIMIT 5 OFFSET 0 2.生成行号: ROW_NUMBER() OVER() |
13 | DECODE等判断函数 | DECODE() | 用标准的CASE WHEN THEN ELSE END语句替换 |
14 | TO_CHAR | TO_CHAR(COL,FMT),格式化字符串可以为空 | TO_CHAR(COL1,'FM999999'),9的个数为字段长度,详细定义见: http://www.postgresql.org/docs/9.4/static/functions-formatting.html |
15 | TO_NUMBER | TO_NUMBER(COL,FMT),格式化字符串可以为空 | TO_NUMBER(COL1,'999999'),9的个数为字段长度,详细定义见: http://www.postgresql.org/docs/9.4/static/functions-formatting.html |
16 | NULL和'' | ORACLE认为''等同于NULL | NULL和''不同 |
17 | NULL和'' | LENGTH('')为NULL | LENGTH('')为0 |
18 | NULL和'' | TO_DATE('','YYYYMMDD')为空 | TO_DATE('','YYYYMMDD')为0001-01-01 BC |
19 | NULL和'' | TO_NUMBER('',1)为NULL | TO_NUMBER('',1),报错 |
20 | NULL和'' | INSERT INTO TEST(VALUE4)VALUES('') [Result]VALUE4=NULL (注:VALUE3字段为数值类型) |
INSERT INTO TEST(VALUE4)VALUES('') VALUE4=NULL |
21 | NULL和'' | INSERT INTO TEST(VALUE4)VALUES('') [Result]VALUE4=NULL (注:VALUE3字段为字符类型) |
INSERT INTO TEST(VALUE4)VALUES('') VALUE4='' |
22 | NULL和'' | INSERT INTO TEST(VALUE4)VALUES(TO_DATE('','YYYYMMDD')) [Result]VALUE4=NULL (注:VALUE3字段为时间类型) |
INSERT INTO TEST(VALUE6)VALUES(TO_DATE('','YYYYMMDD')) [Result]VALUE6=0001-01-01 BC |
23 | ADD_MONTHS | ADD_MONTHS(DATE,INT) | CREATE FUNCTION add_months(date, int) RETURNS date AS 'SELECT ($1 +($2::text||'' month'')::interval)::date' LANGUAGE 'sql' 或SQL: SELECT ($1 +($2::text||' month')::interval) |
24 | LAST_DAY | LAST_DAY(DATE) | 创建函数来解决 CREATE OR REPLACE FUNCTION last_day(date) RETURNS date AS $$ SELECT (date_trunc('MONTH', $1) + INTERVAL '1 MONTH - 1 day')::date; $$ LANGUAGE 'sql'; 或SQL: SELECT (date_trunc('MONTH', $1) + interval '1 month - 1 day')::date; |
25 | MONTHS_BETWEEN | MONTHS_BETWEEN(DATE,DATE) | 创建函数来解决 CREATE FUNCTION MONTH_BETWEEN(d1 timestamp,d2 timestamp) RETURNS NUMERIC AS 'SELECT (extract(year from age(d1,d2))*12 + extract(month from age(d1,d2)))::integer' LANGUAGE 'sql'; |
26 | BITAND | BITAND(A,B) | A & B |
27 | MINUS | MINUS语句 | 以EXCEPT语句来替代 |
28 | BIN_ | SELECT BIN_TO_NUM(1,0,1,0) AS VALUE1 FROM DUAL | SELECT CAST(B'1010' AS INTEGER) AS VALUE1 |
29 | UPDATE语句列列表 | UPDATE accounts SET (contact_last_name, contact_first_name) = (SELECT last_name, first_name FROM salesmen WHERE salesmen.id = accounts.sales_id); |
不支持该语法,需要拆分为多个单独的列 |
30 | SUBSTR函数 | 如果从第一个开始取子串,可以从0开始,也可以从1开始,如果不是第一个开始,则从1开始计数,可以为负值,从字符串结尾计数,用于取最后几位。 | 从1开始计数。如果要取最后几位,可以用RIGHT函数解决。 |
31 | 子查询别名 | 如果FROM后只有一个子查询,该子查询可以没有别名 | 必须有别名 |
32 | 列(别)名为关键字 | Oracle中比如name,type这样的关键字可以直接作为列的别名,比如:select xx name from t | 需要加as,比如select xx as name from t |
33 | 当前登录用户 | SELECT USER FROM DUAL | select current_user |
34 | ALL_COL_COMMENTS | 通过SELECT * FROM ALL_COL_COMMENTS可以获得列注释信息 | select s.column_name as COLUMN_NAME,coalesce(col_description(c.oid,ordinal_position) ,s.column_name) as COMMENTS from information_schema.columns s,pg_class c where s.table_name = 'ac01_si' and s.table_name = c.relname and s.table_schema = current_schema() PG需要通过col_description获得列注释信息 |
35 | 修改表字段类型 | 1.如果字段无数据,可直接修改 2.如果有数据且新类型和原类型兼容,也可以直接修改 3.如果不兼容,可通过对原字段改名,然后增加新字段,再通过UPDATE语句对数据进行处理 |
1.如果新类型和原类型兼容,可直接修改 2.如果不兼容,需要使用USING关键字然后提供一个类型转换的表达式 |
相关推荐
这种方式极大地扩展了PostgreSQL的功能,并提供了与Oracle数据库交互的能力,对于需要跨数据库平台工作的场景非常有用。需要注意的是,在实际部署过程中,可能还会遇到各种具体环境下的兼容性和配置问题,需要根据...
标题中的“postgresql和oracle创建空间索引”涉及的是在两种主流的关系型数据库管理系统(RDBMS)中,如何为地理空间数据创建索引的技术。在处理包含地理信息的数据时,如地图坐标、地理位置等,空间索引能显著提高...
在Oracle、DB2和PostgreSQL这三种数据库管理系统中,Sequence都是内置的特性,允许用户创建并管理这样的自动递增序列。然而,值得注意的是,并非所有数据库系统都支持Sequence,比如MySQL、SQL Server和Sybase就没有...
总结来说,这个压缩包包含的是用于连接MySQL 5.1.8、PostgreSQL 8.0/8.3和Oracle数据库的JDBC驱动JAR文件。这些驱动对于开发跨平台的Java应用,特别是那些需要处理大量数据或需要高度可靠性的应用来说,是不可或缺的...
#### 总结 通过上述步骤,开发人员能够在Oracle 10g或11g环境中轻松地使用DBLink访问SQL Server数据库,极大地提高了跨数据库操作的灵活性和效率。这不仅简化了开发过程,还提高了系统的整体性能和可用性。
### Oracle通用连接(Generic Connectivity)与PostgreSQL集成详解 #### 一、引言 在数据库领域,Oracle通用连接(Generic Connectivity)提供了一种强大的机制,允许Oracle数据库通过标准的ODBC或OLE DB接口来访问...
总结来说,SQL Server、PostgreSQL、MySQL和Oracle都是强大的数据库系统,它们各有特点,适用于不同的应用场景。而Java提供的JDBC API和相关的JAR包使得这些数据库能够与Java程序很好地集成。同时,Apache POI库则为...
在Oracle数据库中,为了方便用户进行数据处理与分析,提供了大量的内置函数。这些函数涵盖了字符串操作、数值计算、日期处理等多个方面,极大地提高了SQL查询的灵活性和效率。然而,由于函数种类繁多,且每种函数的...
PostgreSQL 与 Oracle 的对比通常会涉及以下方面: 1. 性能:两个系统都有优秀的性能,但 PostgreSQL 在某些工作负载下可能更具成本效益,因为它通常是免费的。 2. 功能:Oracle 提供了一些高级特性,如物化视图和...
总结来说,虽然PostgreSQL本身没有内置Oracle AWR那样的功能,但通过利用现有的系统视图、扩展模块和自定义脚本,我们可以构建出一个定制化的性能监控和分析框架。这个框架可以帮助我们理解和优化PostgreSQL数据库的...
本文档旨在介绍如何使用ORA2PG工具进行Oracle数据库到PostgreSQL数据库的跨平台迁移,并提供备份与恢复的案例和操作指导。同时,文中还将介绍如何配置和使用ORACLE_FDW,以及如何处理兼容性问题。 首先,文档的...
Oracle 19C RAC(Real ...在实际操作中,确保所有配置步骤都正确无误,且遵循最佳实践,以确保Oracle 19C RAC与SQL Server之间的稳定通信。此外,定期检查和更新安全策略,如数据库用户的密码,以维护系统的安全性。
本篇文章将详细介绍这两种方式,并提供Oracle、SQL、MySQL、DB2、Access、Sybase、Informix、PostgreSQL等常见数据库的连接字符串示例。 1. JDBC(Java Database Connectivity)是Java平台的标准接口,允许Java应用...
对于DB2、Informix、Sybase、MySQL、PostgreSQL等数据库的连接方式类似,主要区别在于使用的JDBC驱动程序和数据库URL格式。 - **DB2**:使用IBM提供的JDBC驱动`com.ibm.db2.jcc.DB2Driver`。 - **Informix**:使用...
5. **数据迁移工具**:提供了mysql_fdw、postgres_fdw、ora_fdw等多种数据迁移工具,支持与MySQL、Oracle等其他数据库系统的数据交换。 6. **内部网络环境友好**:镜像包内包含了所有必要的依赖项,可在没有外部网络...
尽管psql工具通常用于PostgreSQL数据库,但在某些情况下,您可能会遇到使用psql来操作Oracle数据库的需求。这通常需要借助于特定的驱动程序或适配器实现。例如,您可以考虑使用ODBC连接来实现这一目的: 1. **安装...
总结来说,C#插件用于MySQL和PostgreSQL数据库驱动主要涉及以下几个知识点: 1. ADO.NET框架及其在C#中的使用 2. MySQL Connector/Net驱动及其在C#中的应用 3. Npgsql驱动及其在C#中的应用 4. 数据库连接字符串的...
并且提到了ArcEngine和ArcServer开发中需要使用各种空间数据和表数据,但是使用SQL Server和Oracle太过庞大,Access在安全性上存在问题,而PostgreSQL则是一个轻型的数据库。 标签解读 文章的标签为"PostgreSQL",...
根据给定的文件信息,以下是对“PostgreSQL基本命令”的详细知识点总结: ### PostgreSQL启动与停止 PostgreSQL的启动和停止通常通过`pg_ctl`工具完成。在指定数据目录(`-D`)和日志文件(`-l`)的情况下,可以...