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中是不允许这种写法的。

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

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

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

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

时间: 2024-11-08 12:44:49

Sql-oracle and sqlserver differences的相关文章

你搞懂 ORACLE、 SQLSERVER、MYSQL与DB2的区别了吗

ORACLE. SQLSERVER.MYSQL与DB2的区别--平台性:    Oracle.MYSQL与DB2可在所有主流平台上运行:    SQL Server只能在Windows下运行: --安全性:    Oracle的安全认证获得最高认证级别的ISO标准认证,而SQL Server并没有获得什么安全认证:    这方面证明了Oracle的安全性是高于SQL Server的: --数据类型.函数.sql语句:    oracle中有复合数据类型,sql server中没有: 总之:   

MYSQL-实现ORACLE 和SQLserver数据中- row_number() over(partition by ) 分组排序功能

网上看见了好多例子都基本上是一样的,没有过多的解释,对于一个初学MySQL来说有点难,我把部分转摘过来如下 原文:http://www.cnblogs.com/buro79xxd/archive/2012/08/29/2662489.html 要求目标:1.确定需求: 根据部门来分组,显示各员工在部门里按薪水排名名次. 创建表格:2.来创建实例数据: drop table if exists heyf_t10; create table heyf_t10 (empid int ,deptid i

Java学习-006-三种数据库连接 MySQL、Oracle、sqlserver

此文主要讲述在初学 Java 时,常用的三种数据库 MySQL.Oracle.sqlserver 连接的源代码整理.希望能对初学 Java 编程的亲们有所帮助.若有不足之处,敬请大神指正,不胜感激!源代码测试通过日期为:2015-1-31 10:46:48,请知悉. 所需的 jar 包下载链接为:http://yunpan.cn/cKEWbBntAjtKy  访问密码 bd58 以下为初学 Java 常用的三种数据库 MySQL.Oracle.sqlserver 连接的源代码,敬请参阅! MyS

oracle与sqlserver利用函数生成年月日加流水号

最近在做oracle相关的项目,刚接触oracle,与sqlserver语法上还是有区别的 sqlserver : 示例:FX+当前年月日+00001 如下图流水号实力所示 原理: 首先 'FX'是固定的,获取当前年月日方法在sqlserver中分别是: 1.年:YEAR(GETDATE()) 2.月:month(getdate()) 3.日:DAY(GETDATE()) 其次最主要的是流水号自动加1,主要思路是获取到当前表中FxNum最大的数(后6位最大的数),并且用right函数获取后6位并

oracle与sqlserver部分区别

oracle和sqlserver的区别:1,执行修改操作要接commit,不然数据仅仅只是查看,并不是提交数据2,oracle不能使用select 字段 这种查看方式查看数据:3,oracle存储过程可以先写包,相当于声明数据类型,然后实现sql这种4,oracle表里自增是用序列,(理解:相当于声明一个唯一key值自增,查出一次后就相当于使用了)5,oracle的赋值操作 变量:=数值 这种, 6,oracle不能像sqlserver一样用@iddent(不记得了)insert之后的值,使用方

采用Hibernate框架的研发平台如何能够真正兼容Oracle和sqlServer数据库

都说Hibernate框架的使用可以很容易的让你的研发平台支持多种不同类型的数据库,但实践表明,这里的“容易”,是相对的. 想让研发平台支持多种数据库,并不是一件简单的事,也可以这么说:并不是只要使用了Hibernate框架就能实现的. 下面记录一下我做这件事情的过程和一些感悟. 当我接到该任务时,我先大致的理了一下思路: 要完成迁移,总体上有2大块工作要做,分别是:数据库层面的迁移  和  平台底层代码的改造 一.数据库层面的迁移过程: 1.通过sqlServer Studio2008 工具将

Oracle/Mysql/SqlServer函数区别

mysql日期和时间格式转换 Linux scp 使用详解 Oracle/Mysql/SqlServer函数区别 2011-07-01 12:34:36|  分类: Mysql技术 |  标签:mysql  sqlsever  oracle  函数   |举报 |字号大中小 订阅 Sql代码 1.类型转换 --Oracle select to_number('123') from dual; --123; select to_char(33) from dual;  --33; select t

Oracle 与 SqlServer 的区别浅析总结

我主要用过的数据库为Oracle10g和SqlServer2008,通过实际运用和查阅资料整理如下: 主题 Oracle 10g SQLServer 2008 存储过程格式 Create Or Replace Procedure 存储过程名 (参数列表) IS Begin ---存储过程内容 End 存储过程名; Create Procedure 存储过程名  (参数列表) AS Begin --存储过程内容 End 存储过程参数 1.指定参数类型,但不指定长度; 2.在参数及类型间要加入输入输

Mysql、Oracle、SqlServer的JDBC连接实现和对比(提供驱动包)

首先,我们需要准备数据库连接所需的jar包.目前mysql的驱动包可能比较好找,但是oracle和sqlserver的有很多,要找到能用的要花一点点心思,这里直接把下载地址和版本发送出来. Mysql: 驱动程序包:mysql-connector-java-5.1.38.jar 下载地址:http://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.38     驱动:com.mysql.jdbc.driver     url: