如何格式化MS Access查询中的日期以防止美国/英国问题

aSy*_*oad 2 ms-access date

在Access Access中过滤日期时,如何确保获取正确数量的记录:

SELECT ID, REF, SalesDate, DCount("ID","tblRecords"," Ref='" & [Ref] & "' AND [SalesDate]=#" & format([SalesDate],"yyyy/mm/dd") & "#") as EXPR1 from tblCurrent 
Run Code Online (Sandbox Code Playgroud)

如果它不能被误解,如28-04-12,它会选择日期确定,但是如果它是04-06-12它不会捡起它,因为它假设它是错误的方式.

请注意,此查询不是动态创建的,也不是从表单等生成的...

Fio*_*ala 5

我要么在VBA中使用yyyy/mm/dd作为日期:

#" & Format([SalesDate],"yyyy/mm/dd") & "#"
Run Code Online (Sandbox Code Playgroud)

或参数,用于构建查询.

编辑更多信息

看到您正在使用SQL服务器,我建议您使用派生表,您可以更快地找到它,例如:

SELECT dbo_Table_1.ADate, ACount FROM dbo_Table_1
LEFT JOIN (SELECT a.ADate,Count(*) As ACount 
           FROM  dbo_Table_1 As a GROUP BY a.ADate) b
ON dbo_Table_1.Adate=b.ADate
Run Code Online (Sandbox Code Playgroud)

编辑重新讨论

SELECT * FROM dbo_vwRecordsCurrent As t 
LEFT JOIN (
   SELECT a.OpptyIncentiveModifiedDate, a.DataSetID, Count(*) AS ACount 
   FROM dbo_vwRecordsHistorical AS a 
   WHERE a.OpportunityIgnored = True 
   GROUP BY a.OpptyIncentiveModifiedDate, a.DataSetID) AS h 
ON t.OpptyIncentiveModifiedDate = h.OpptyIncentiveModifiedDate 
AND t.DataSetID = h.DataSetID
Run Code Online (Sandbox Code Playgroud)

由于名称很长,我给你的表别名,所以对我来说,在外部sql上使用别名更具可读性.它们在内部sql中是必不可少的.使用现有表的名称对派生表进行别名不是一个好主意.