<p class="ql-block">### **`DateDiff` 是什么函数?** </p><p class="ql-block">`DateDiff` 是 Microsoft Access(以及 SQL Server、VBA)中的一个函数,用于计算两个日期之间的时间间隔(年、月、天等)。 </p><p class="ql-block">---</p><p class="ql-block">### **`DateDiff` 语法** </p><p class="ql-block">```sql</p><p class="ql-block">DateDiff(interval, date1, date2 [, firstdayofweek [, firstweekofyear]])</p><p class="ql-block">```</p><p class="ql-block">- **`interval`**(必填):计算的时间单位,如 `"yyyy"`(年)、`"m"`(月)、`"d"`(天)。 </p><p class="ql-block">- **`date1`**(必填):起始日期。 </p><p class="ql-block">- **`date2`**(必填):结束日期。 </p><p class="ql-block">- **`firstdayofweek`**(可选):指定一周从哪一天开始,默认是 **星期日(vbSunday = 1)**。 </p><p class="ql-block">- **`firstweekofyear`**(可选):指定一年从哪一周开始,默认是 **第一周包含 1 月 1 日**。 </p><p class="ql-block">---</p><p class="ql-block">### **1. 计算两个日期之间的年数**</p><p class="ql-block">```sql</p><p class="ql-block">SELECT DateDiff("yyyy", #2000-01-01#, #2024-03-18#) AS YearsDifference;</p><p class="ql-block">```</p><p class="ql-block">**结果:** `24`(2024 - 2000 = 24 年)</p><p class="ql-block">---</p><p class="ql-block">### **2. 计算员工年龄(基于出生日期)**</p><p class="ql-block">```sql</p><p class="ql-block">SELECT FirstName, LastName, DOB, DateDiff("yyyy", [DOB], Date()) AS Age</p><p class="ql-block">FROM Employees;</p><p class="ql-block">```</p><p class="ql-block">**解释:** </p><p class="ql-block">- `DOB` 是员工的出生日期字段。 </p><p class="ql-block">- `Date()` 返回当前日期。 </p><p class="ql-block">- `DateDiff("yyyy", [DOB], Date())` 计算员工的年龄。 </p><p class="ql-block">**注意:** 这种方法可能不准确,因为它只比较“年”,不会考虑生日是否已经过。更精确的方法是: </p><p class="ql-block">```sql</p><p class="ql-block">SELECT FirstName, LastName, DOB, </p><p class="ql-block"> DateDiff("yyyy", [DOB], Date()) - IIF(Format([DOB], "mmdd") > Format(Date(), "mmdd"), 1, 0) AS ExactAge</p><p class="ql-block">FROM Employees;</p><p class="ql-block">```</p><p class="ql-block">这里 `IIF(Format([DOB], "mmdd") > Format(Date(), "mmdd"), 1, 0)` 用来调整年龄,如果今年的生日还没过,就减去 1。</p><p class="ql-block">---</p><p class="ql-block">### **3. 计算两个日期之间的天数**</p><p class="ql-block">```sql</p><p class="ql-block">SELECT DateDiff("d", #2024-01-01#, #2024-03-18#) AS DaysBetween;</p><p class="ql-block">```</p><p class="ql-block">**结果:** `77` 天。</p><p class="ql-block">---</p><p class="ql-block">### **4. 计算员工入职多少个月**</p><p class="ql-block">```sql</p><p class="ql-block">SELECT FirstName, LastName, HireDate, DateDiff("m", [HireDate], Date()) AS MonthsWorked</p><p class="ql-block">FROM Employees;</p><p class="ql-block">```</p><p class="ql-block">这会返回员工从 **HireDate(入职日期)** 到 **今天** 工作了多少个月。</p><p class="ql-block">---</p><p class="ql-block">### **常见 `interval` 参数**</p><p class="ql-block">| `interval` | 含义 | 示例 |</p><p class="ql-block">|------------|------|------|</p><p class="ql-block">| `"yyyy"` | 年 | `DateDiff("yyyy", #2000-01-01#, #2024-03-18#) → 24` |</p><p class="ql-block">| `"q"` | 季度 | `DateDiff("q", #2023-01-01#, #2024-03-18#) → 5` |</p><p class="ql-block">| `"m"` | 月 | `DateDiff("m", #2023-01-01#, #2024-03-18#) → 14` |</p><p class="ql-block">| `"d"` | 天 | `DateDiff("d", #2024-01-01#, #2024-03-18#) → 77` |</p><p class="ql-block">| `"w"` | 周 | `DateDiff("w", #2024-01-01#, #2024-03-18#) → 11` |</p><p class="ql-block">| `"h"` | 小时 | `DateDiff("h", #2024-03-17 10:00#, #2024-03-18 10:00#) → 24` |</p><p class="ql-block">| `"n"` | 分钟 | `DateDiff("n", #2024-03-18 08:00#, #2024-03-18 10:00#) → 120` |</p><p class="ql-block">| `"s"` | 秒 | `DateDiff("s", #2024-03-18 08:00#, #2024-03-18 08:01#) → 60` |</p><p class="ql-block">---</p><p class="ql-block">### **总结**</p><p class="ql-block">`DateDiff` 是一个**计算日期差异**的强大工具,常用于: </p><p class="ql-block">✅ 计算年龄 </p><p class="ql-block">✅ 计算员工工作年限 </p><p class="ql-block">✅ 计算两个日期之间的天数、月份或年份 </p><p class="ql-block">✅ 计算某个事件发生了多久 </p><p class="ql-block">如果你在 Access 中处理时间相关的数据,`DateDiff` 是一个非常实用的函数!</p>