六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 316|回复: 0

Oracle PL/SQL 和 SQL Server T-SQL 的一些比较

[复制链接]

升级  80%

12

主题

12

主题

12

主题

童生

Rank: 1

积分
40
 楼主| 发表于 2013-1-4 01:27:58 | 显示全部楼层 |阅读模式
<div id="cnblogs_post_body">1.字符串连接
Oracle用 || 符号作为连接符,而SQL Server的连接符是加号:+ 。
Oracle查询如下:SELECT 'name' || 'last Name' FROM table
SQL Server查询如下:SELECT  'name' + 'last Name'
2.数字取舍
Oracle数据库内有一个TRUNC函数,该函数返回m位十进制数的n位;如果省略m则n就是0位。而SQL Server下可以用ROUND。
Oracle查询如下:SELECT  TRUNC(15.79,1) FROM DUAL;    --不四舍五人
SQL Server查询如下:SELECT ROUND(15.79, 0) ;   --四舍五入
3.数字转换
Oracle的TO_CHAR函数可以把n位NUMBER数据类型转换为VARCHAR2 数据类型,同时采用可选的数字格式。 而SQL Server则通过STR函数返回数字转换之后的字符数据。不过,该函数不具方便的Format参数。
Oracle查询如下所示:SELECT to_char(15.79 , 99.99) from dual
                            SELECT to_char(SYSDATE,'YYYY-MM-DD') from dual
SQL Server查询如下:SELECT STR(15.79)
            SELECT CAST(CONVERT(VARCHAR(10), GETDATE(),120) AS VARCHAR(10))
4.LENGTH和LEN
Oracle查询如下:SELECT LENGTH('SQL') FROM DUAL;
SQL Server查询如下:SELECT LEN('SQL') ;
5.日期
两种系统都具有各自的当前日期和时间格式。 Oracle取得日期:SYSDATE , SQL Server则是:GETDATE()
Oracle日期值中的月份进行了格式调整(返回日期再加上n月):SELECT add_months(SYSDATE, 12) FROM dual
SQL Server则是如下完成同等功能的:SELECT DATEADD(mm,12, GETDATE())
Oracle日期值中直接对数据进行减法操作:SELECT add_months(SYSDATE, 12) - SYSDATE FROM dual
SQL Server则是如下完成同等功能的:SELECT DATEDIFF(dd, GETDATE() ,DATEADD(mm,12, GETDATE()))
6.执行查询时
PLSQL执行查询的时候,FROM子句是必须的,而SQL SERVER不一定
Oracle查询如下: SELECT 2*5 FROM dual
SQL SERVER查询如下: SELECT  2*5
7. 更新语句的区别
在T-SQL中更新相对简单些,直接用下面的语句都是可以:
UPDATE t1 SET  t1.Money = t2.Money FROM sell  t1 LEFT JOIN sellst t2 ON t1.id = t2.id
UPDATE sell SET Money = t2.Money FROM sellst t2 WHERE  t2.ID = ID
而在Oracle中这样写是不对的,应该更改如下:
UPDATE sell t1 SET t1.money = (SELECT t2.money FROM sellst t2 WHERE t1.id = t2.id)  WHERE EXISTS (SELECT 1 FROM sellst t2 WHERE t2.id = t1.id)

您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表