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)