怎样把Oracle查询转换为SQL Server

来源:中国IT实验室    编辑:Anne  时间:2008年08月22日

在把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查询转换为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迁移到SQL Server 2000的过程中并没有遭遇太棘手的问题。当然,一开始我就深知系统之间肯定存在显著的差异。我希望本文列出的差别有助于你避免一些常见的问题。我在清单A中列出了一个示例,大家可以参考一下。

oracle 转成sql server,怎样把Oracle查询转换为SQL Server相关推荐

  1. oracle改成归档模式_将Oracle数据库改为归档模式并启用Rman备份

    如下Linux环境下对单节点数据库采用文件系统情况的配置归档模式过程. 首先查看数据库归档模式和磁盘使用情况,确定归档文件放到什么位置: [oracle@gisdbserver ~]$ sqlplus ...

  2. MySql实现分页查询的SQL,mysql实现分页查询的sql语句 (转)

    摘要:MySQL数据库实现分页查询的SQL语句写法! 一:分页需求: 客户端通过传递start(页码),limit(每页显示的条数)两个参数去分页查询数据库表中的数据,那我们知道MySql数据库提供了 ...

  3. mybatis mysql 分页sql语句_MySql实现分页查询的SQL,mysql实现分页查询的sql语句(转)...

    http://blog.csdn.net/sxdtzhaoxinguo/article/details/51481430 摘要:MySQL数据库实现分页查询的SQL语句写法! 一:分页需求: 客户端通 ...

  4. from server sql 拼接统计两个子查询_[SQL SERVER系列]之嵌套子查询和相关子查询

    子查询有两种类型,一种是只返回一个单值的子查询,这时它可以用在一个单值可以使用的地方,这时子查询可以看作是一个拥有返回值的函数:另外一种是返回一列值的子查询,这时子查询可以看作是一个在内存中临时存在的 ...

  5. sql的加减乘除运算_sql查询,sql加减乘除运算,sql函数

    好记性不如写成博客 公司要做个台帐报表,用到sql加减乘除运算,sql判断及各种函数等,如下 create table temp( SELECT (@rowNO := @rowNo+1) AS '序号 ...

  6. 应用程序的数据库从Sql Server迁移到Oracle

    应用程序的数据库从Sql Server迁移到Oracle 迁移案例一:数据库: Sql Server 2008到Oracle 9i 工具: Sybase PowerDesiner 12 试用版, PL ...

  7. oracle数据库访问sqlserver2008,透过SQL Server 2008访问Oracle 10g的配置方法

    之前写过一篇关于SQL Server 访问MySQL数据库的文章,最近正好又遇到需要访问Oracle 的情况,将配置过程记录下来也供大家参考. 准备工作 事先在需要访问Oracle 数据库的主机上完成 ...

  8. 通过SQL Server 2008 访问Oracle 10g

    之前写过一篇关于SQL Server 访问MySQL 数据库的文章,最近正好又遇到需要访问Oracle 的情况,将配置过程记录下来也供大家参考. 准备工作 事先在需要访问Oracle 数据库的主机上完 ...

  9. sql server 2008连接oracle操作步骤详细记录,SQLServer连接Oracle详细步骤

    我们知道SQL Server和Oracle其实很多原理都类似.特别是一些常用的SQL语句都是按照标准来.所以它们也可以有一定的互操作性的.这里 我们知道SQL Server和Oracle其实很多原理都 ...

最新文章

  1. confirm修改按钮文字_CAD教程来袭,CAD菜鸟们你知道CAD如何创建和设置文字样式吗?...
  2. 数仓dw怎么建_网易严选如何打造数仓规范和评价体系
  3. 深入理解java虚拟机 精华总结(面试)
  4. 优化查询、访问量大时的优化
  5. python数字转换_Python实现中文数字转换为阿拉伯数字的方法示例
  6. andriod 新建 Activity_ Form (详细设置)
  7. 需要单机还是集群部署_单机、分布式、集群的区别与联系
  8. 酷黑风个人主页+引导页
  9. 如何在jsp页面中连接mysql数据库_如何使用JSP访问MySQL数据库
  10. 作用域、变量提升、函数提升、数据类型
  11. 《证券基金经营机构信息技术管理办法》要点简读
  12. Android面试:说一下 LiveData 的 postValue ?与SetValue有什么区别?连续调用会有什么问题?为什么?
  13. Excel小笔记——冻结窗格
  14. css 效果之并列排列
  15. ROM修改---修改本机的mac地址
  16. 国际音标(IPA)和美国音标(KK)对照表
  17. 利用stm32f103c8t6实现对WS2812的控制(从硬件出发)
  18. 组态软件的开发(C#)
  19. SharePoint 2010 ——自定义上传页面与多文件上传解决方案
  20. oracle创建Triggers

热门文章

  1. C#图片动画效果(旋转360度)异步
  2. 谈谈MySQL的WriteSet并行复制
  3. manacher算法学习(求最长回文子串长度)
  4. 用js实现图片的无缝滚动效果
  5. 【补】day3 table标签
  6. 浮点数转换成字符串函数
  7. 四、处理表单数据 (基础教程4)
  8. dp HDU - 5074
  9. Hadoop笔记整理(二):HDFS
  10. 2018-05-17-OAA-一种mermaid脚本驱动的软件项目模块图形化表述思路