`

postgresql与oracle区别总结

 
阅读更多

 

序号 项目 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数据库交互的能力,对于需要跨数据库平台工作的场景非常有用。需要注意的是,在实际部署过程中,可能还会遇到各种具体环境下的兼容性和配置问题,需要根据...

    postgresql和oracle创建空间索引

    标题中的“postgresql和oracle创建空间索引”涉及的是在两种主流的关系型数据库管理系统(RDBMS)中,如何为地理空间数据创建索引的技术。在处理包含地理信息的数据时,如地图坐标、地理位置等,空间索引能显著提高...

    Oracle、DB2、PostgreSQL之Sequence总结

    在Oracle、DB2和PostgreSQL这三种数据库管理系统中,Sequence都是内置的特性,允许用户创建并管理这样的自动递增序列。然而,值得注意的是,并非所有数据库系统都支持Sequence,比如MySQL、SQL Server和Sybase就没有...

    mysql5.1.8与3.1.6postgre8.0与8.3 oracle jar文件

    总结来说,这个压缩包包含的是用于连接MySQL 5.1.8、PostgreSQL 8.0/8.3和Oracle数据库的JDBC驱动JAR文件。这些驱动对于开发跨平台的Java应用,特别是那些需要处理大量数据或需要高度可靠性的应用来说,是不可或缺的...

    oracle10g或11g通过dblink访问sql server数据库

    #### 总结 通过上述步骤,开发人员能够在Oracle 10g或11g环境中轻松地使用DBLink访问SQL Server数据库,极大地提高了跨数据库操作的灵活性和效率。这不仅简化了开发过程,还提高了系统的整体性能和可用性。

    转载:Oracle通用连接(Generic Connectivity)Postgresql

    ### Oracle通用连接(Generic Connectivity)与PostgreSQL集成详解 #### 一、引言 在数据库领域,Oracle通用连接(Generic Connectivity)提供了一种强大的机制,允许Oracle数据库通过标准的ODBC或OLE DB接口来访问...

    SqlServer ,postgresql-8.3-603, mysql,oracle以及将数据导入到excel 的相关jar包

    总结来说,SQL Server、PostgreSQL、MySQL和Oracle都是强大的数据库系统,它们各有特点,适用于不同的应用场景。而Java提供的JDBC API和相关的JAR包使得这些数据库能够与Java程序很好地集成。同时,Apache POI库则为...

    oracle 的常用函数

    在Oracle数据库中,为了方便用户进行数据处理与分析,提供了大量的内置函数。这些函数涵盖了字符串操作、数值计算、日期处理等多个方面,极大地提高了SQL查询的灵活性和效率。然而,由于函数种类繁多,且每种函数的...

    Oracle19C RAC通过gateways连接SQL server数据库

    Oracle 19C RAC(Real ...在实际操作中,确保所有配置步骤都正确无误,且遵循最佳实践,以确保Oracle 19C RAC与SQL Server之间的稳定通信。此外,定期检查和更新安全策略,如数据库用户的密码,以维护系统的安全性。

    PostgreSQL

    PostgreSQL 与 Oracle 的对比通常会涉及以下方面: 1. 性能:两个系统都有优秀的性能,但 PostgreSQL 在某些工作负载下可能更具成本效益,因为它通常是免费的。 2. 功能:Oracle 提供了一些高级特性,如物化视图和...

    PostgreSQL awr

    总结来说,虽然PostgreSQL本身没有内置Oracle AWR那样的功能,但通过利用现有的系统视图、扩展模块和自定义脚本,我们可以构建出一个定制化的性能监控和分析框架。这个框架可以帮助我们理解和优化PostgreSQL数据库的...

    Oracle跨平台数据迁移手册及备份恢复手册(self).pdf

    本文档旨在介绍如何使用ORA2PG工具进行Oracle数据库到PostgreSQL数据库的跨平台迁移,并提供备份与恢复的案例和操作指导。同时,文中还将介绍如何配置和使用ORACLE_FDW,以及如何处理兼容性问题。 首先,文档的...

    jdbc和odbc连接字符串 Oracle SQL MySQL DB2 Access Sybase Informix PostgreSQL

    本篇文章将详细介绍这两种方式,并提供Oracle、SQL、MySQL、DB2、Access、Sybase、Informix、PostgreSQL等常见数据库的连接字符串示例。 1. JDBC(Java Database Connectivity)是Java平台的标准接口,允许Java应用...

    万能postgresql数据库部署安装仓库-含12-15版本所有版本以及官方所有插件

    5. **数据迁移工具**:提供了mysql_fdw、postgres_fdw、ora_fdw等多种数据迁移工具,支持与MySQL、Oracle等其他数据库系统的数据交换。 6. **内部网络环境友好**:镜像包内包含了所有必要的依赖项,可在没有外部网络...

    java连接数据库(Oracle8、Sql Server、DB2、Informix、Sybase、MySQL、PostgreSQL)

    对于DB2、Informix、Sybase、MySQL、PostgreSQL等数据库的连接方式类似,主要区别在于使用的JDBC驱动程序和数据库URL格式。 - **DB2**:使用IBM提供的JDBC驱动`com.ibm.db2.jcc.DB2Driver`。 - **Informix**:使用...

    win7中如何安装oracle10g和使用oracle10的说明文档

    尽管psql工具通常用于PostgreSQL数据库,但在某些情况下,您可能会遇到使用psql来操作Oracle数据库的需求。这通常需要借助于特定的驱动程序或适配器实现。例如,您可以考虑使用ODBC连接来实现这一目的: 1. **安装...

    C#插件用于MySQL and PostgreSQL数据库驱动

    总结来说,C#插件用于MySQL和PostgreSQL数据库驱动主要涉及以下几个知识点: 1. ADO.NET框架及其在C#中的使用 2. MySQL Connector/Net驱动及其在C#中的应用 3. Npgsql驱动及其在C#中的应用 4. 数据库连接字符串的...

    如何在ArcEngine与ArcServer开开发过程中使用postgresql

    并且提到了ArcEngine和ArcServer开发中需要使用各种空间数据和表数据,但是使用SQL Server和Oracle太过庞大,Access在安全性上存在问题,而PostgreSQL则是一个轻型的数据库。 标签解读 文章的标签为"PostgreSQL",...

    postgresql 基本命令

    根据给定的文件信息,以下是对“PostgreSQL基本命令”的详细知识点总结: ### PostgreSQL启动与停止 PostgreSQL的启动和停止通常通过`pg_ctl`工具完成。在指定数据目录(`-D`)和日志文件(`-l`)的情况下,可以...

Global site tag (gtag.js) - Google Analytics