我目前在我的数据库中有一个表,用于跟踪服务的开始日期和结束日期。我需要比较用户输入的日期,看它是否在开始日期和结束日期之间。我现在的问题是,在表格中,访问以DD/MM/YYYY
开头日期的商店,用户将日期输入的表单中的文本框格式化为DD/MM/YYYY
。但是,一旦我点击VBA并运行SQL查询,它就会将日期读为MM/DD/YYYY
。
我的查询是:
SELECT * FROM table WHERE #09/01/2018# BETWEEN startDate AND endDate
我的测试条目是:
表:
startDate endDate service
08/01/2018 02/02/2018 ABC
这应该返回此条目,但是因为它将其读作MM/DD/YYYY
它不会。如果我输入#13/01/2018#
,则会返回该条目,因为它检测到13
是日期,不能是一个月。我怎么能纠正这个问题,以便它09/01/2018
并返回条目?
答案 0 :(得分:0)
如果这是VBA查询,那么您的观察结果是正确的。在查询设计器中,这些将按预期工作。
回顾Allen Browne在这里的优秀解释; http://allenbrowne.com/ser-36.html 也有解决方案。
答案 1 :(得分:0)
您的查询应使用"反向"美国序列或ISO序列:
SearchDate = SomeDateValue
SQL = "SELECT * FROM table WHERE #" & Format(SearchDate, "yyyy\/mm\/dd") & "# BETWEEN startDate AND endDate"
或者,如果你从代码构建它:
SQL = "SELECT * FROM table WHERE Date() BETWEEN startDate AND endDate"
或者,如果你总是在今天搜索:
SELECT COUNT(*) as total,
SUM(CASE WHEN active = 1 THEN 1 END) as active_emp,
SUM(CASE WHEN active = 0 THEN 1 END) as inactive_emp
FROM it_staff_status