【发布时间】:2017-07-24 23:49:14
【问题描述】:
我在 MS Access 中有一个表格,其中包含员工详细信息 (tblStaff):
| Employee Number | Employee Name | Dept |
------------------------------------------------
| 205147 | Joe Bloggs | IT |
| 205442 | John Doe | Accounts |
我每周用新数据刷新此表,如果有任何记录发生更改(例如更改部门),那么它们将与该记录的有效日期一起存档在另一个表 (tblArchiveStaff) 中。
| Employee Number | Employee Name | Dept | DateFrom | DateTo |
----------------------------------------------------------------------
| 205147 | Joe Bloggs | HR | 03/01/16 | 01/06/17 |
我正在尝试编写一个查询,该查询将根据在给定日期有效的表从这些表中选择记录
我们可以假设 tblStaff 中的记录从 tblArchiveStaff 中该员工的最后一个条目的 dateTo + 1 开始有效,或者如果他们没有存档记录,则从 16 年 1 月 3 日开始有效。
到目前为止,我已经提出了以下查询,我已将 #07/01/2017# 的日期条件硬编码到其中:
SELECT [Employee Number], [Dept], DateFrom, DateTo
FROM
(
SELECT ts.[Employee Number], ts.[Dept], nz(ta2.DateTo,#01/02/16#)+1 AS DateFrom, date() AS DateTo
FROM tblStaff ts LEFT JOIN tblArchiveStaff ta2 ON ts.[Employee Number] = ta2.[Employee Number]
UNION ALL
SELECT ta.[Employee Number], ta.[Dept], ta.DateFrom, ta.DateTo
FROM tblArchiveStaff ta
) AS tblUnion
WHERE #07/01/2017# BETWEEN DateFrom AND DateTo;
据我了解,上述查询应返回 2017 年 7 月 1 日有效的记录,这将是 tblStaff 中的两条记录,但它返回的是 tblArchiveStaff 中的记录。几乎就像将日期条件视为 1 月 7 日,这意味着它的格式为 dd/mm/yyyy,我认为这是不可能的。
谁能解释一下?
【问题讨论】:
-
就像 Trevor 所说,使用中性日期格式。日期文字在 Access msdn.microsoft.com/en-us/library/aa711653(v=vs.71).aspx 中应采用美国格式,但如果不能将其解释为美国日期,Acesss 将尝试通过将其解释为 dd/mm/yyyy 日期来“提供帮助”。如果可以的话,最好使用 ISO 格式的年月日。