專案常需同時支援 Oracle、Access、SQL Server 三種資料庫,SQL 語法差異是開發痛點。本文整理 13 類常見差異,助你撰寫相容性更高的跨平台查詢。
| 功能 | Access (A) | SQL Server (S) | Oracle (O) |
|---|---|---|---|
| 目前系統時間 | Now() | GETDATE() | SYSDATE FROM DUAL |
| 字串串接 | & | + | || |
| 字串函數 (截取/大小寫/查找) | Mid, UCase, LCase, InStr | SUBSTRING, UPPER, LOWER, CHARINDEX | SUBSTR, UPPER, LOWER, INSTR |
| 條件判斷 | IIF | CASE WHEN THEN | DECODE / CASE WHEN THEN |
| 日期字面值 | #2007-5-1# 或 CDATE() | '2007-5-1' | TO_DATE('2007-05-01','YYYY-MM-DD') |
| 型別轉換 | CStr, CInt, CDate | CONVERT | TO_CHAR, TO_NUMBER, TO_DATE |
| INSERT...SELECT 括號 | 不需括號 | 可加可不加 | 可加可不加 |
| 保留字處理 | [] 括住 | [] 括住 | 雙引號 "" |
| 別名 AS 關鍵字 | 不可省略 | 可省略 | 可省略 |
| 表別名前綴 | 選用 | 選用 | 必須加表別名 |
| 查詢含冒號 | 設 ParamCheck=False | 無問題 | 無問題 |
| 布林值儲存 | -1/0 | 1/0 | 1/0 (NUMBER(1)) |
| VARCHAR 最大長度 | 255 | 8000/MAX | 4000 |
<> 0 相容三平台。掌握這些差異點,能大幅降低多資料庫專案的維護成本。