zoukankan      html  css  js  c++  java
  • Sql-oracle and sqlserver differences

    1.string contact operator

    Sqlserver use + or contact(sqlserver 2012)

    In oracle, you can also use contact, but you can not used + to contact string, you should use ||;

    2.oracle date time is different with sqlserver date.

    Sqlserver date just have date part, not contains time part.

    Oracle date format has date and time part.

    This is a big difference.

    但是如何你使用oracle sql developer, 不修改默认的设置,你查询

    Select sysdate from dual;是看不到时间part的,你可以使用

    Select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

    可以清楚地看到时间与日期部分,当然如果你更改了配置,或者使用的其他数据库查询工具,

    也许可以看到时间部分,例如我使用的dbever就可以直接看到。

    oracle中的timestamp基本等同行sqlserver中的datetime2类型,包含timezone和一定量级的秒值。

    oracle中的时间转换使用to_date(datestring,dateformat);

    例如:to_date('1990-11-12','yyyy-mm-dd');

       

    3.oracle not support table alias with as.

    So you can write the following statement.

    Select * from table as alias;

    如果你在query中添加派生字段,oracle 需要加别名。否则会报错。如下:

    select rownum,* from HR.COUNTRIES ;

    Report error: ORA:00936, missing expression.

    改成如下即可使用:

    select rownum,c.* from HR.COUNTRIES c;

    4.oracle和sqlserver中的hash函数,

    sqlserver中支持checksum(binary_checksum)和hashbytes等函数,详见MSDN。

    oracle中支持ora_hash(10g起)等函数

    select OWA_OPT_LOCK.CHECKSUM(rid || rowname),

    ora_hash(rid || rowname,1024,1) ,

    ora_hash(to_char(rid) || rowname,1024,1),

    dbms_utility.get_hash_value(rid || rowname,1,1024)

    from test;

    仅分享一个使用心得,oracle中,如果你使用hash函数来进行数据比对,建议使用ora_hash,

    首先是因为它是系统本身支持,不需要第三方的包,不需要另外赋权限,当比对的内容过百万的时候,

    它的速度要远远优于owa_opt_lock.checksum函数的计算速度。

    5.sqlserver 中的top oracle中要使用rownum<=n来代替。

    oracle中的字符比较默认是区分大小写的,而sqlserver是要看配置的,默认不区分大小写。

    oracle中的对象(列名等)长度不能超过三十。

    如果列名中含有空格等,可以使用"",而在sqlserver中使用[];

    6.oracle中字符串为空时表示为null,而在sqlserver中却不同。

    insert into test(rid,rowname) values(3,'');

    sqlserver中查询使用select * from test where rowname='' or len(rowname)=0;

    oracle中如此查询就找不到值,而需要使用如下:

    select * from test where rowname is null;

    7.其他区别

    因为 sqlserver扩展了标准的sql,称为TSQL,是有许多强大之处的。

    例如它的CTE是允许直接进行更新的,所以有时候你写一个逻辑逻辑的CTE,最后直接更新值。

    而在oracle中是不允许这种写法的。

    所以当在oracleupdate(delete)一张表的某些记录时,但要引用到其他多张表时,就比较麻烦,

    需要写成update(delete) … where exists (not exists)这种方式。

    如果需要用其他的表值更新,还要写在set后面用子查询,非常不爽。

    后来merge的出现,在一定程度上缓解了这种不爽,但仍不及sqlserver的好用。

       

       

       

    Looking for a job working at Home about MSBI
  • 相关阅读:
    chrome 开发者工具——前端实用功能总结
    而立之年——回顾我的前端转行之路
    编译原理实战入门:用 JavaScript 写一个简单的四则运算编译器(修订版)
    手把手带你入门前端工程化——超详细教程
    手把手教你搭建 Vue 服务端渲染项目
    前端项目自动化部署——超详细教程(Jenkins、Github Actions)
    前端国际化辅助工具——自动替换中文并翻译
    深入了解 webpack 模块加载原理
    实现一个 webpack loader 和 webpack plugin
    博客本地编辑器-OpenLiveWriter安装使用
  • 原文地址:https://www.cnblogs.com/huaxiaoyao/p/4122369.html
Copyright © 2011-2022 走看看