在將 Access 應用程式遷移至 SQL Server,或撰寫跨資料庫相容的 SQL 陳述式時,語法差異是常見絆腳石。本文整理兩大資料庫在日期時間函數、日期常值、邏輯判斷、求餘運算、目前日期時間取得等核心語法的對照表,並附上實用範例,供開發人員快速查閱。
| 間隔單位 | Access 語法 | SQL Server 語法 |
|---|---|---|
| 天 | DATEDIFF('d', start, end) | DATEDIFF(day, start, end) |
| 小時 | DATEDIFF('h', start, end) | DATEDIFF(hour, start, end) |
| 月 | DATEDIFF('m', start, end) | DATEDIFF(month, start, end) |
範例:查詢與今天相差 30 天的記錄
-- Access
SELECT * FROM Orders WHERE DATEDIFF('d', OrderDate, DATE()) = 30;
-- SQL Server
SELECT * FROM Orders WHERE DATEDIFF(day, OrderDate, GETDATE()) = 30;
| 資料庫 | 語法 | 範例 |
|---|---|---|
| Access | #YYYY-MM-DD# 或 #" & dateVar & "# | SELECT * FROM T WHERE D = #2024-01-15# |
| SQL Server | 'YYYY-MM-DD' 或 '" & dateVar & "' | SELECT * FROM T WHERE D = '2024-01-15' |
建議統一使用 ISO 8601 格式 YYYY-MM-DD,兩者皆可正確解析。
| 情境 | Access | SQL Server |
|---|---|---|
| 欄位為 False/0 | WHERE NOT Finished | WHERE Finished = 0 |
| 欄位為 True/1 | WHERE Finished | WHERE Finished = 1 |
SQL Server 無 Boolean 型別,請改用數值比較。
| 資料庫 | 運算子 | 範例 |
|---|---|---|
| Access | MOD | SELECT A MOD B FROM T |
| SQL Server | % | SELECT A % B FROM T |
| 資料庫 | 函數 | 備註 |
|---|---|---|
| Access | NOW() | 包含日期與時間 |
| SQL Server | GETDATE() | 精度至 3.33 毫秒;高精度需求可用 SYSDATETIME() |
'YYYY-MM-DD',相容性最佳。BIT,查詢條件改寫為 = 1 / = 0。'd',SQL Server 直接用 day。Access → SQL Server
------------------------------------------------
#date# → 'date'
DATEDIFF('d',..) → DATEDIFF(day,..)
DATEDIFF('h',..) → DATEDIFF(hour,..)
DATEDIFF('m',..) → DATEDIFF(month,..)
NOT field → field = 0
field → field = 1
A MOD B → A % B
NOW() → GETDATE()
掌握上述對照,可大幅降低跨資料庫遷移與相容性開發的除錯時間。