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) 介绍 更改跟踪是一种轻量型解决方案,它为应用程序提供了一种有效的更改跟踪机制.常规的,自定义变更跟踪和读取跟踪数据, ...
随机推荐
- IOS开发UI基础UIPikerView的属性
UIPikerView的属性 1. numberOfComponents:返回UIPickerView当前的列数NSInteger num = _pickerView.numberOfComponen ...
- [JS] JavaScript框架(2) D3
D3(Data-Driven Documents)是一个用于网页作图.生成互动图形的JavaScript函数库. 官网:http://d3js.org/ 下载: cdn:<script src= ...
- 投票系统 & 简易js刷票脚本
早就听说有什么刷票脚本,微博投票等等相关的投票都有某些人去刷票. 试一下吧,兴许自己也会刷票呢?捣鼓了几个小时,终于有所眉目. (1)投票系统 要刷票,就得先有个投票界面. 当然,可以直接去各个投票网 ...
- ANT自动打包U3D安卓项目研究笔记
概述 因项目使用Atlassian Stash作为项目源码管理端,且其支持Ant命令自动编译,可使其根据最新的代码自动打包,故产生该研究Ant打包的任务.在此将研究过程及一些相关知识整理记录在此. 本 ...
- sql联合查询去除重复计算总和
1.首先来个联合查询 SELECT 字段1, 字段2, 字段3, 字段4 FROM 表1 INNER JOIN 表2 ON 表1.字段x = 表2.字段x x:代表随意的一个,只要在联合查询的两张表都 ...
- 查询自己电脑的IP
1.怎样查询电脑的IP 1)运用dos命令 在运行窗体上输入cmd,进入dos命令窗体,输出ipconfig/all命令,找到自己的IP地址 上面所圈出的就是本机IP地址 2) 进入“网络和共享中心” ...
- sql:Oracle11g 表,视图,存储过程结构查询
-- Oracle 11 G --20160921 涂聚文再次修改 --Geovin Du --GetTables SELECT owner, object_name, created FROM al ...
- 技巧题---Single boy
Description Today is Christmas day. There are n single boys standing in a line. They are numbered fo ...
- (转)x11vnc配置--ubuntu14.04
原文网址:http://www.cnblogs.com/elmaple/p/4354814.html x11vnc是连接到真实的X会话,相比vnc4server和tightvncserver自己创建不 ...
- 开源项目Foq简介
Foq是一个轻量级-线程安全的mocking类库.使用它来mock抽象类与接口这是我们通常的做法.Foq的名字来自Moq,如果你使用过Moq的话,自然后联想到它能做什么.Foq主要是为了F#的 ...