1

从 Excel 移动到 Access 并遇到一点困难,我希望有人能帮助我。

我有一个充满遭遇数据的表(Table: EncData);该数据的一部分是相遇的日期(Column: EncDateTime)。

在我的查询中,我需要有一列显示该日期是WeekendWeekday还是Holiday。周末和工作日部分对我来说不是问题(很幸运Format())。我正在努力解决如何将遭遇日期与假日查找表 ( Table: Holidays) 匹配。

在 Excel 中,我使用了一个公式Match()来查看它是否返回假期。如何在 Access 中执行此操作?

TABLE: Holidays
ID__________HolidayDate
1           10/8/2012
2           9/3/2012

TABLE: EncData
ID__________EncDateTime__________________More Data
12          10/08/2012 09:15:12 AM       (etc)

在我的查询(显示EncData表中的信息)中,我一直在玩 DLookup 没有成功,只是想看看我是否能找到匹配项:

DLookup("HolidayDate", "Holidays", "HolidayDate =" & Format([EncDateTime],"mm/dd/yyyy"))

即使这不起作用,我也可以说它也很慢。

对 SQL 知之甚少,但我认为这应该是小菜一碟。

谢谢

4

2 回答 2

2

SQL 中的日期表示为 #year/month/day#,例如。今天的日期是#2012/11/19#,要使 DLookup 工作,您必须使用以下语法:

DLookup("HolidayDate", "Holidays", "HolidayDate=" & Format([EncDateTime],"\#yyyy/mm/dd\#"))

要检查今天是否是假期,您可以使用以下命令:

DLookup("HolidayDate", "Holidays", "HolidayDate=" & Format(Date(),"\#yyyy/mm/dd\#"))

是的,DLookup 很慢,你不应该在查询中使用它。要检查是否EncDateTime是假期,您应该使用以下 SQL 代码加入EncDataHolidays一起:

SELECT EncData.*
FROM EncData INNER JOIN Holidays ON EncData.EncDateTime = Holidays.HolidayDate

这应该返回所有的 EncData 行是假期。它应该,但它可能不会。请注意,EncDateTime 不仅包含日期,还包含时间,因此它与仅包含日期的 HolidayDate 不匹配。这可以代替:

SELECT EncData.*
FROM EncData INNER JOIN Holidays ON DateValue(EncData.EncDateTime) = Holidays.HolidayDate

并提取 EncData 中的所有行,而不仅仅是假期?

SELECT EncData.*, Holidays.HolidayDate
FROM EncData LEFT JOIN Holidays ON DateValue(EncData.EncDateTime) = Holidays.HolidayDate

请注意,当HolidayDate 包含日期时,仅当那一天是假日时,否则它将为NULL。

这些只是开始的一些基本想法。但是不要忘记您可以使用向导进行查询,这样您就可以随时查看您的 SQL 代码的样子。

于 2012-11-19T21:57:54.043 回答
0

在这里使用fthiella的代码建议是我最终想出的使用IIf语句来确定日期是假日工作日还是周末

SELECT EncData.*, 
IIf(ISNULL(Holidays.HolidayDate),IIf(Weekday(EncData.EncDateTime) = 1 or Weekday(EncData.EncDateTime) = 7,"Weekend","Weekday"),"Holiday") AS [DayType]
FROM EncData
LEFT JOIN Holidays ON DateValue(EncData.EncDateTime)=Holidays.HolidayDate; 

我不确定我是否应该改用CASE语句(它们更快吗?)但这暂时有效。谢谢!

于 2012-11-20T15:40:54.353 回答