Access 與 SQL Server 在日期時間函數的語法上存在關鍵差異,開發跨資料庫應用時必須特別注意。
| 函數 | Access 語法 | SQL Server 語法 |
|---|---|---|
| DateDiff | DateDiff('d', Time1, Time2) | DateDiff(d, Time1, Time2) |
| 系統時間 | Now() | GETDATE() |
' 判斷資料庫類型
IF IsSqlDataBase = 1 Then
' SQL Server: 間隔單位無引號,用 GETDATE()
Conn.Execute "DELETE FROM lyt_log_info WHERE DATEDIFF(day, logintime, GETDATE()) >= 3"
Else
' Access: 間隔單位需引號,用 NOW()
Conn.Execute "DELETE FROM lyt_log_info WHERE DATEDIFF('d', logintime, NOW()) >= 3"
End IF
day、w) → 報錯「至少有一個參數未指定」| 單位 | 說明 | 備註 |
|---|---|---|
| yyyy | 年 | |
| q | 季度 | |
| m | 月 | |
| y / d / w | 天 | 三者在 DateDiff 中皆表示「天數」 |
| ww | 周 (日曆周) | 以週日為界計算周數 |
| h / n / s | 時 / 分 / 秒 |
DateAdd(interval, number, date)
' 範例:計算距 2007-09-18 還有幾天
Response.Write "離 2007-9-18 還有 " & DateDiff("d", Now(), "2007-9-18") & " 天"
w (一周的日數) 與 ww (周) 計算邏輯不同:w 計算相隔多少個 7 天,ww 計算日曆周數DateDiff 返回 1,雖實際僅 1 天掌握這些差異,能有效避免跨資料庫遷移或多資料庫支援專案中的日期運算 Bug。