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

时间:2021-08-13 03:26:43

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)