MS Access SQL-比较常规日期和短日期

MS Access SQL-比较常规日期和短日期,sql,ms-access,ms-access-2010,Sql,Ms Access,Ms Access 2010,我需要比较两种不同的日期类型:一般日期和短日期 我尝试使用FORMAT来获取转换后的日期,但不能在WHERE子句中使用它 "SELECT DT, Item, N, InvoiceNum, FORMAT(DT, 'Short Date') as DT_SD FROM itemHistory WHERE DT_SD='#" & selectedDate & "#')" 您不能在where中使用别名,因为您的别名在select中使用。除非将其包装到子查询中 原因: 其中:计算条件并删

我需要比较两种不同的日期类型:一般日期和短日期

我尝试使用FORMAT来获取转换后的日期,但不能在WHERE子句中使用它

"SELECT DT, Item, N, InvoiceNum, FORMAT(DT, 'Short Date') as DT_SD FROM itemHistory WHERE DT_SD='#" & selectedDate & "#')"

您不能在where中使用别名,因为您的别名在select中使用。除非将其包装到子查询中

原因:

其中:计算条件并删除不匹配的行

因此,where语句将被视为行,而不是别名。请使用@Rene所述的完整表达式

"SELECT DT, Item, N, InvoiceNum FROM itemHistory 
WHERE FORMAT(DT, 'Short Date') = #" & selectedDate & "#)"

您应该始终将日期处理为日期,而不是文本

对于Access SQL,必须为日期值使用格式正确的字符串表达式:

"SELECT DT, Item, N, InvoiceNum FROM itemHistory WHERE DateDiff('d', DT, #" & Format(selectedDate, "yyyy\/mm\/dd") & "#) = 0"
如果DT从不包含时间值,则可将其减少为:

"SELECT DT, Item, N, InvoiceNum FROM itemHistory WHERE DT = #" & Format(selectedDate, "yyyy\/mm\/dd") & "#"

如果在字段DT上有索引,这将运行得更快。

在WHERE子句中不能使用别名。改为使用完整表达式formatt,‘Short Date’This?从ItemHistory中选择Formatt,“Short Date”您不能使用该别名,因为您的别名位于SELECT中,除非您使用子查询包装查询。。从itemHistory中选择DT,Item,N,InvoiceNum,formatt,'Short Date',作为DT_SD,其中formatt,'Short Date'=',selectedDate&'我尝试了您的代码,它给了我一个错误。SELECT语句包含拼写错误或缺少的保留字或参数名称,或者标点符号不正确。*常规日期类型实际上是yyyy\mm\dd吗?因为它看起来像6/16/2006 6:16:16 AMbtw,我通过删除InvoiceNum和FROM之间的额外逗号修复了您的代码,但它仍然没有显示我的所有记录。删除了逗号,谢谢。如果使用第一个代码缺少记录,则日期DT与您选择的日期不匹配。我尝试了您的代码,但它不起作用,但我通过删除所选日期周围的撇号修复了这一问题,因此看起来像&selectedDate&。真奇怪。