当前位置:首页>>开发编程>>数据库>>新闻内容  
把Oracle查询转换为SQL Server
作者: 发布时间:2007-10-1 9:31:19 | 【字体:

  在把Oracle查询转换为SQL Server的时候要特别当心一些不容易注意到的问题。我们知道,T-SQL是SQL Server的语言引擎,而Oracle的语言引擎却是PLSQL.这两种查询语言都对。

  ANSI SQL-92标准进行了扩展以提供额外的支持力度。你所创建的应用程序几乎都要用到这些补充特性。本文就对最常用的、非标准的Oracle扩展进行了说明,同时还要介绍下如何对这些扩展进行转化以用在SQL Server环境下。

  列的选择

  用PLSQL执行数据查询的时候,FROM子句是必须的,这同SQL Server的要求是一样的。 SELECT语句必须选择针对的数据表。在Oracle数据库内有一种特殊的表DUAL.DUAL表由Oracle连同数据字典一同创建,所有的用户都可以用名称DUAL访问该表。这个表里只有一列DUMMY,该列定义为VARCHAR2(1)类型,有一行值X.从DUAL表选择数据常被用来通过SELECT语句计算常数表达式,由于DUAL只有一行数据,所以常数只返回一次。

  Oracle下的DUAL查询如下所示  

SELECT ‘x’ FROM dual

  而对等的SQL Server查询则是下面这个样子:  

SELECT ‘x’

  连接

  Oracle用|| 符号作为连接符,而SQL Server的连接符是加号:+ .

  Oracle查询如下所示:  

Select ‘Name’ || ‘Last Name’ From tableName

  对应的SQL Server查询如下所示:  

Select ‘Name’ + ‘Last Name’

  数字取舍

  Oracle数据库内有一个TRUNC函数,该函数返回m位十进制数的n位;如果省略m则n就是0位。m的值可以为负,表示截去小数点左边m位数字。

  在SQL Server下可以用Round或者Floor.

  以下是Oracle查询:  

SELECT TRUNC(15.79,1) "Truncate" FROM DUAL;

  下面是同类查询的SQL Server版本:    

SELECT ROUND(15.79, 0) rounded ,

  ROUND(15.79, 0,1) truncated

  SELECT FLOOR(ROUND(15.79, 0)),

  FLOOR(ROUND(15.79, 0,1) )

  数字转换

  Oracle的TO_CHAR函数可以把n位NUMBER数据类型转换为VARCHAR2 数据类型,同时采用可选的数字格式。

  SQL Server则通过STR函数返回数字转换之后的字符数据。不过,该函数不具方便的Format参数。

  Oracle查询如下:  

SELECT to_char(123.45 ,99999999999999) from tab

  SELECT to_char(EXPIRY_DATE,'DDMONYYYY') from tab

  以下是SQL Server版本的查询: 

SELECT STR(123.45, 14)

  SELECT STR(round(123.455 , 2),12,2)

  SELECT CAST(REPLACE((CONVERT(varchar(12) ,

  EXPIRYDATE, 106 )),' ' , '') as varchar(9))

  LENGTH和LEN

  以下是Oracle的查询:   

SELECT LENGTH('SQLMAG')

  "Length in characters" FROM DUAL;

  以上查询在SQL Server下是这样写的:

  SELECT LEN('SQLMAG') "Length in characters"

  日期

  Oracle取得日期和采用如下方式:

  SYSDATE

  SQL Server则是这样的:

  GETDATE()

  你可以用各种语法操作日期。

  以下的代码对Oracle日期值中的月份进行了格式调整(返回日期再加上n月):  

Select   add_months(sysdate,12) from dual

  SQL Server则是如下完成同等功能的:  

Select dateadd(mm,12,getdate())

  数据的减法也不同。以下代码在Oracle中直接

  对数据进行减法操作:  

SELECT sysdate -add_months(sysdate,12) FROM dual

  SQL Server则是这样做的:  

SELECT  datediff(dd, GetDate(),dateadd(mm,12,getdate()))


文章来源:赛迪网
·安装Oracle后配置和启动企业管理器的方法
·简单介绍Oracle 9i的16种数据类型
·如何在Oracle中导入dmp数据库文件
·轻松修改Oracle数据库表的大小
·实例讲解Oracle里抽取随机数的多种方法
·Oracle在Linux操作系统下的安装小结
·用Oracle8i修复数据库坏块的三种方法
·在Oracle中导出、导入dmp数据库文件
·通过dmp文件察看Oracle字符集
 放生
 愚爱
 够爱
 触电
 白狐
 葬爱
 光荣
 画心
 火花
 稻香
 小酒窝
 下雨天
 右手边
 安静了
 魔杰座
 你不像她
 边做边爱
 擦肩而过
 我的答铃
 怀念过去
 等一分钟
 放手去爱
 冰河时代
 你的承诺
 自由飞翔
 原谅我一次
 吻的太逼真
 左眼皮跳跳
 做你的爱人
 一定要爱你
 飞向别人的床
 爱上别人的人
 感动天感动地
 心在跳情在烧
 玫瑰花的葬礼
 有没有人告诉你
 即使知道要见面
 爱上你是一个错
 最后一次的温柔
 爱上你是我的错
 怎么会狠心伤害我
 不是因为寂寞才想
 亲爱的那不是爱情
 难道爱一个人有错
 寂寞的时候说爱我