Access 中 `FORMAT` 函數返回類型為 `Text` (字符串),但兩側格式化細節不一致導致字符串不相等。**
-- 修改 ON 條件
ON DT.時間 = FORMAT(AA.時間, 'yyyy年MM月') AND DT.車牌號 = AA.車牌號
-- ↑ 強制 AA 端也用 FORMAT 轉為完全一致的字符串
**原理**:雖然 AA 子查詢中已用 `FORMAT`,但在 JOIN 時再次顯式 `FORMAT` 強制類型轉換與格式統一,消除隱式差異。
| 坑點 | 現象 | 對策 |
|---|---|---|
| 日期字面值 | `#2023-01-01#` 非 `'2023-01-01'` | 始終用 `#日期#` |
| FORMAT 返回類型 | 返回 Text,非 Date/Time | 比較時雙側同用 FORMAT,或用 DateDiff/Year/Month 函數 |
| IIF vs NZ | `IIF(ISNULL(x),0,x)` → `NZ(x,0)` 更簡潔 | 優先用 NZ |
| 參數查詢 | 參數名與字段名衝突 | 參數加前綴 `p_`,如 `p_begin` |
| 保留字 | `時間`、`日期`、`名稱` 等需加 `[]` | 字段名盡量避開保留字 |
-- 使用臨時表或 CTE (Access 不支持 CTE,可建立查詢對象)
-- 1. 建立查詢 qry_DT: 選擇時間、車牌號
-- 2. 建立查詢 qry_AA: 選擇時間、車牌號、燃油費
-- 3. 主查詢 JOIN qry_DT 和 qry_AA
-- 界面操作更直觀,性能更好,易維護