2010年2月9日 星期二

SQL Server 與 Oracle 函數差別

當開發人員要開發由ORACLE -> SQL SERVER資料庫平台的服務時,
最先遇到的問題是"SQL語法"究竟能不能通用呢?

很多設計師在設計系統時,若常常是BASE ON ORACLE,那麼其程式撰寫的SQL會非常依賴ORACLE,相對的在移轉性上會比較困難。
雖然個人認為ORACLE在函數的運用上有非常多元,速度上可能也比較佔優勢。
但近來SQL SERVER 2008的T-SQL,有許多以前SQL 2000沒有的函數,可以說已經跟ORACLE不相上下了~~。

在此說明這兩者資料庫的函數不同點吧!相同的我就不加以說明,會再繼續補充:

函數與語法 Oracle SQL Server 2008
字串連結 || +
補位 LPAD/RPAD REPLICATE(補位字元,<最大長度n>-len(欄位)) +cast(欄位 as nvarchar)
型態轉換 TO_CHAR CONVERT,CAST
型態轉換 TO_NUMBER CONVERT,CAST
型態轉換 TO_DATE CONVERT(TYPE,COL,Sql server定義格式編號)
NULL值轉換 NVL ISNULL   (   check_expression   ,   replacement_value   ) 
四捨五入(數) CEIL CEILING
取整數 TRUNC CAST( COL AS INT)
取子字串 SUBSTR SUBSTRING
取長度 LENGTH LEN
取系統日 SYSDATE GETDATE()
時間相減差 datediff() Date1-Date2
序號 sequence (.nextval,.currval) 類似的作法(IDENTIFY,@@IDENTITY,IDENT_CURRENT)
或自行撰寫