異構資料庫遷移時,Oracle PL/SQL 與 SQL Server T-SQL 在內建函數上差異最大。本文針對**數字轉字串、日期運算、字串長度**三大高頻場景提供對照轉換表。
| Oracle | SQL Server | 說明 |
TO_CHAR(123.45, '99999999999999') | STR(123.45, 14) | 固定寬度,SQL Server STR 無格式模板,需配合 ROUND/CAST |
TO_CHAR(123.455, '999.99') | STR(ROUND(123.455,2), 6, 2) | STR(值, 總長, 小數位) |
TO_CHAR(expiry_date, 'DDMONYYYY') | CAST(REPLACE(CONVERT(VARCHAR(12), expiry_date, 106), ' ', '') AS VARCHAR(9)) | Style 106 = dd mon yyyy,再移除空格 |
| 功能 | Oracle | SQL Server |
| 當前日期時間 | SYSDATE | GETDATE() |
| 日期加減月份 | ADD_MONTHS(SYSDATE, 12) | DATEADD(MONTH, 12, GETDATE()) |
| 日期差 (天數) | SYSDATE - ADD_MONTHS(SYSDATE, 12) | DATEDIFF(DAY, GETDATE(), DATEADD(MONTH, 12, GETDATE())) |
| 日期截斷至月首 | TRUNC(SYSDATE, 'MM') | DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) |
| 本月最後一天 | LAST_DAY(SYSDATE) | EOMONTH(GETDATE()) (2012+) |