MS Access SQL - 将一般日期与短日期进行比较
MS Access SQL - Compare General Date to Short Date
我需要比较 2 种不同的日期类型(一般日期 & 短日期)。
我尝试使用 FORMAT() 来获取转换后的日期,但您不能在 WHERE 子句中使用它。
"SELECT DT, Item, N, InvoiceNum, FORMAT(DT, 'Short Date') as DT_SD FROM itemHistory WHERE DT_SD='#" & selectedDate & "#')"
您不能在您的位置使用别名,因为您的别名在您的 select 中使用。除非你包装到子查询
原因:
Where : conditions are evaluated and rows that do not match are removed
所以您的 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 上有索引,这会 运行 更快。
我需要比较 2 种不同的日期类型(一般日期 & 短日期)。
我尝试使用 FORMAT() 来获取转换后的日期,但您不能在 WHERE 子句中使用它。
"SELECT DT, Item, N, InvoiceNum, FORMAT(DT, 'Short Date') as DT_SD FROM itemHistory WHERE DT_SD='#" & selectedDate & "#')"
您不能在您的位置使用别名,因为您的别名在您的 select 中使用。除非你包装到子查询
原因:
Where : conditions are evaluated and rows that do not match are removed
所以您的 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 上有索引,这会 运行 更快。