Oracle与SQL SERVER编程差异分析(入门)
网上有关Oracle与SQL SERVER性能差异的文章很多,结论往往是让你根据数据量与预算来选择数据库。但实际项目中,特别是使用 .Net 开发的系统,支持以上两种数据库或者更多已经成为Boss的普遍需求。
下面将常见的Oracle与SQL SERVER编程差异罗列,并提出解决方案。
1、时间格式的差异
SQL SERVER与Oracle的对时间格式的要求是不同的,SQL SERVER可以直接插入符合条件的字符串作为时间,而Oracle需要经过额外的转换。
SQL SERVER: 创建一张Test表,其中dateTime字段为datetime类型,使用以下语法是可以成功插入数据库的。
insert into test (dateTime) values('2013-10-16 20:34:38')
Oracle: 在相同环境下,执行上述语句会提示“文字与格式字符串不匹配”的错误,我们需要使用to_date将格式转换为Oracle的日期型,修改后sql语句如下。
insert into test (dateTime) values(to_date('2013-10-16 20:34:38','yyyy-mm-dd hh24:mi:ss'))
为了解决时间格式的差异,我们可以通过记录数据库类型来对sql语句进行特殊处理,这一方法可以解决后面的其它差异,在没有其它选择时是一把万能钥匙。
我们换一种思路,在此我们只是需要记录下时间,因此我们可以使用其它格式的数据来记录。比如,使用Unix时间戳。
下面是C#实现Unix时间戳与普通时间间转换的代码:
/// <summary>
/// Converted Unix timestamp to DateTime time
/// </summary>
/// <param name="argTimeStamp">Unix timestamp</param>
/// <returns>DateTime</returns>
public DateTime GetTime(string argTimeStamp)
{
DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(, , ));
long lTime = long.Parse(argTimeStamp + "");
TimeSpan toNow = new TimeSpan(lTime);
return dtStart.Add(toNow);
} /// <summary>
/// Converted DateTime time to Unix timestamp
/// </summary>
/// <param name="argTime">DateTime</param>
/// <returns>Unix timestamp</returns>
public string ConvertDateTimeInt(DateTime argTime)
{
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(, , ));
return (argTime - startTime).TotalSeconds.ToString();
}
现在,我们可以很方便的使用10位字符型来存储日期类型的数据了。
2、Count函数返回值的差异
在数据库操作中使用 Count 来判断是否存在是很常见的做法,Oracle 与 SQL SERVER 使用 Count 返回的类型不一致,需要通过 Convert.ToInt32 转换查询到的结果。产生这一现象的原因是 SQL SERVER 中的 int 类型在 Oracle 中为 Integer ,因此在涉及整型时将结果使用 Convert.ToInt32 转换。
SQL SERVER 与 Oracle 的类型不匹配还可能发生在使用枚举作为字段时,Oracle会将枚举解释成字符串类型,因此也需要额外的转换。
3、Convert函数的差异
在 SQL SERVER 与 Oracle 使用 Convert 的语法有明显差异。
Ø 将字符型装换为日期型
SQL SERVER: CONVERT(DATETIME,'20131016',121)
Oracle: to_date('2013-10-16','yyyy-mm-dd')
Ø 将日期型转换为字符型
SQL SERVER: CONVERT(CHAR(10),GETDATE(),121)
Oracle: to_char(sysdate,'yyyy-mm-dd')
4、别名的使用差异
在 SQL SERVER 中可以使用 as 来定义表的别名,Oracle 不支持此用法,在使用别名时需要去掉 as。Oracle 也不支持 SQL SERVER 表使用 dbo.Table 的语法。另外 SQL 语句结尾的 ‘;’ 在Oracle也不被支持。
另一个要注意的是在 Oracle 中如果有使用 union 连接时,Order by 中的列名不能加表的别名,否则会出错。
5、字符串拼接差异
在 SQL SERVER 中可以使用 ‘+’ 来拼接字符串,在 Oracle 中 ‘+’ 仅能数值型字段,字符型可以使用 “||” 或者 concat 函数来实现拼接。
本文SQL语句在 SQL SERVER 2008 和 Oracle 11g 下测试,不保证其它环境下的正确性。
本文来自 NewIdea 的博客,作者 Carey Tzou 。
原文地址:http://www.cnblogs.com/NewIdea/p/sqlbase.html
转载请注明出处,否则拒绝转载!
Oracle与SQL SERVER编程差异分析(入门)的更多相关文章
- ORACLE和SQL SERVER的数据同步常用方法
ORACLE和SQL SERVER的数据同步常用方法 1. 自己编程,或者第三方工具2. 在sqlserver中,使用linkedserver,访问oracle,然后编写job进行数据同步3. 在or ...
- 对Oracle 、SQL Server、MySQL、PostgreSQL数据库优缺点分析
对Oracle .SQL Server.MySQL.PostgreSQL数据库优缺点分析 Oracle Database Oracle Database,又名Oracle RDBMS,或简称Oracl ...
- MySQL、Oracle和SQL Server的分页查询语句
假设当前是第PageNo页,每页有PageSize条记录,现在分别用Mysql.Oracle和SQL Server分页查询student表. 1.Mysql的分页查询: SELECT * FROM s ...
- Datatypes translation between Oracle and SQL Server
Datatypes translation between Oracle and SQL Server part 1: character, binary strings Datatypes tran ...
- [Oracle][ODBC SQL Server Driver][SQL Server]对象名 'RECOVER.HS_TRANSACTION_LOG' 无效(转)
原帖由 qingyun 于 2010-6-21 15:44 发表 在写pl/sql的时候,有个很重要的注意点:比如:begin update 某个sqlserver的表@dblink名字 .... ...
- Oracle与SQL Server事务处理的比较
事务处理是所有大型数据库产品的一个关键问题,各数据库厂商都在这个方面花费了很大精力,不同的事务处理方式会导致数据库性能和功能上的巨大差异.事务处理也是数据库管理员与数据库应用程序开发人员必须深刻理解的 ...
- InstallShield高级应用--检查是否安装ORACLE或SQL Server
InstallShield高级应用--检查是否安装ORACLE或SQL Server 实现原理:判断是否存在,是通过查找注册表是否含有相应标识来判断的. 注意:XP与WIN7系统注册表保存方式不一 ...
- SQL Server审计功能入门:SQL Server审核 (SQL Server Audit)
原文:SQL Server审计功能入门:SQL Server审核 (SQL Server Audit) 介绍 Audit是SQL Server 2008之后才有的功能,它能告诉你"谁什么时候 ...
- SQL Server审计功能入门:更改跟踪(Change Tracking)
原文:SQL Server审计功能入门:更改跟踪(Change Tracking) 介绍 更改跟踪是一种轻量型解决方案,它为应用程序提供了一种有效的更改跟踪机制.常规的,自定义变更跟踪和读取跟踪数据, ...
随机推荐
- springMVC源码分析之拦截器
一个东西用久了,自然就会从仅使用的层面上升到探究其原理的层面,在javaweb中springmvc更是如此,越是优秀的框架,其底层实现代码更是复杂,而在我看来,一个优秀程序猿就相当于一名武林高手,不断 ...
- 写出优美代码的两个方式:一步到位VS迭代优化
最近把手头这个安卓APP的所有事务性方法都写完了,有了以下体会,新手体会,老鸟轻拍 想写成优美代码的人一般都会有这样的想法: 一定要在写每一句代码,写每一个方法,构造每一个类的时候,都要记得优化: ...
- 【C#】OOP之继承那点事
前言: 继承这点事,说多不多,说少不少,这里只描述了一些我认为的基础篇,望各位大神指教.本节参照了C#高级编程和Think in java对继承的描述,我个人认为OOP只是思想,故看明白一个就说通的, ...
- Oracle基础 各种语句的定义格式
Oracle内建数据类型 一. 字符数据 1. char(size) 2. varchar2(size) 最常用,最大长度4000字节 3. nvhar(size).nvarchar(size) 4. ...
- 使用Dhcpstarv解决DHCP服务器冲突问题
场景: 内网环境需要开启多个DHCP服务器,分别给不同的设备进行PXE安装. 存在的问题: 多个DHCP的情况下,设备在启动时随机从一个DHCP服务器获取IP(哪个DHCP服务器先响应就从哪个获取)并 ...
- x3d 规范 在线镜像版
国内访问web网站不稳定,在此部署一个国内的在线版本,供有需要的同学查阅. 注:已失效 x3d规范文档: https://code.csdn.net/x3dcn/x3d-specification-d ...
- strtr对用户输入的敏感词汇进行过滤
/** * 过滤用户输入的基本数据,防止script攻击 * * @access public * @return string */ function compile_str($str) { $ar ...
- mysql 64 zip download
open the url :: http://dev.mysql.com/downloads/file/?id=461109 and click the location "no tha ...
- Java与线程
导语 我们知道,new一个thread,调用它的start的方法,就可以创建一个线程,并且启动该线程,然后执行该线程需要执行的业务逻辑, 那么run方法是怎么被执行的呢? Java线程和os线程 os ...
- mysql启动报错:Starting MySQL...The server quit without updating PID file
在mysql的data目录下误删除了mysql-bin.000001,mysql-bin.000002等文件,但是没有删除mysql-bin.index文件,此时启动mysql就会报错: Starti ...