PL-SQL和T-SQL的区别比较_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
2
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 1789 | 回复: 1   主题: PL-SQL和T-SQL的区别比较        下一篇 
jinquan
注册用户
等级:少尉
经验:390
发帖:89
精华:0
注册:2012-3-1
状态:离线
发送短消息息给jinquan 加好友    发送短消息息给jinquan 发消息
发表于: IP:您无权察看 2015-6-15 16:53:15 | [全部帖] [楼主帖] 楼主

字符串连接

Oracle用 符号作为连接符,而SQL Server的连接符是加号:+ 。
Oracle查询如下所示:Select ‘Name’ ‘Last Name’ From tableName
SQL Server查询如下:Select ‘Name’ + ‘Last Name’

GUID

Oracle用SYS_GUID()生成GUID,不含{}和-;getregguidstring 生成 GUID 含{}和-;

SQL Server用NEWID生成GUID;  

数字取舍


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()))

执行查询时


PLSQL执行查询的时候,FROM子句是必须的,而SQL SERVER不一定
如ORACLE中select 2*5 from dual
而SQL SERVER中select 2*5


更新语句的区别

SQLserver与Oralce中的两表关联更新是区别的。

在T-SQL中更新相对简单些,直接用下面的语句都是可以:

Update b
Set b.processflag = a.processflag
From temp_1 a Join temp_2 b
On a.msgid_db = b.msgid
Update temp_2
Set Usertime = b.Usertime
From temp_2 a Join temp_1 b
On a.msgid = b.msgid_db
Update temp_2
Set Usertime = b.Usertime
From temp_1 b
where msgid = b.msgid_db


而在Oracle中这样写是不对的,应该更改如下:

Update Temp_2 a
Set a.Usertime = (Select b.Usertime
From Temp_1 b
Where b.Msgid_Db = a.Msgid)
Where Exists (Select 1 From Temp_1 b Where b.Msgid_Db = a.Msgid);


更新多个字段:

Update Temp_2 a
Set a.Usertime = (Select b.Usertime
From Temp_1 b
Where b.Msgid_Db = a.Msgid),
a.processflag = (Select b.processflag
From Temp_1 b
Where b.Msgid_Db = a.Msgid)
Where Exists (Select 1 From Temp_1 b Where b.Msgid_Db = a.Msgid);


多表关系更新:

Update Temp_2 a
Set a.Usertime = (Select b.Usertime
From Temp_1 b
Where b.Msgid_Db = a.Msgid),
a.processflag = (Select c.processflag
From Temp_3 c
Where c.Msgid = a.Msgid)
Where Exists (Select 1 From Temp_1 b Where b.Msgid_Db = a.Msgid)
And Exists (Select 1 From Temp_3 c Where c.Msgid = a.Msgid);


--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
superstar
注册用户
等级:上尉
经验:525
发帖:2
精华:0
注册:2015-6-3
状态:离线
发送短消息息给superstar 加好友    发送短消息息给superstar 发消息
发表于: IP:您无权察看 2015-6-16 9:02:18 | [全部帖] [楼主帖] 2  楼

而SQL SERVER中select 2*5
这也可以。。。


赞(0)    操作        顶端 
总帖数
2
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论