本站首页    管理页面    写新日志    退出

«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告

  如果你忍了,欺负你的人将来可能就进监狱了。如果你反击,欺负你的人将来可能就获选十大杰出青年了。

        QQ: 3159671

http://greenboy.javaeye.com/

http://blog.sina.com.cn/u/1278341164 小鸟吹烟


我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:小鸟吹烟
日志总数:157
评论数量:424
留言数量:-1
访问次数:1253820
建立时间:2006年10月23日




[数据库方面]Oracle和SQL Server不同之处 
文章收藏,  网上资源,  软件技术

tone 发表于 2007/10/31 11:08:45

 转:http://hi.baidu.com/flora200609/blog/item/f213d0fd17383545d7887d7d.html T-SQL是SQL Server的语言引擎,而Oracle的语言引擎却是PLSQL。这两种查询语言都对ANSI SQL-92标准进行了扩展以提供额外的支持力度。你所创建的应用程序几乎都要用到这些补充特性。本文就对最常用的、非标准的Oracle扩展进行了说明,同时还要介绍下如何对这些扩展进行转化以用在SQL Server环境下。  列的选择  用PLSQL执行数据查询的时候,FROM子句是必须的,这同SQL Server的要求是一样的。 SELECT语句必须选择针对的数据表。在Oracle数据库内有一种特殊的表Dual。Dual表是Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的Select中。Dual表由Oracle连同数据字典一同创建,所有的用户都可以用名称DUAL访问该表。这个表里只有一列DUMMY,该列定义为VARCHAR2(1)类型,有一行值X。从DUAL表选择数据常被用来通过SELECT语句计算常数表达式,由于DUAL只有一行数据,所以常数只返回一次。 Oracle下的DUAL查询如下所示: SELECT ‘x’ FROM dual 而对等的SQL Server查询则是下面这个样子: SELECT ‘x’  以下是null相关的知识,用到了dual:SQL> select 1 from dual where null=null;没有查到记录SQL> select 1 from dual where null='';没有查到记录SQL> select 1 from dual where ''=''; 没有查到记录SQL> select 1 from dual where null is null;1---------1SQL> select 1 from dual where nvl(null,0)=nvl(null,0);1---------1查看当前连接用户SQL> select user from dual; 查看当前日期、时间SQL> select sysdate from dual; 连接  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())) 


阅读全文(5035) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.031 second(s), page refreshed 144768808 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号