我正在尝试为我的程序生成一个水晶报告,显然我无法过滤那些采用日期时间格式的数据,如果我使用“=”而不是“>或<”。 我的代码就是这样的
dim x as string ="1/1/2014"
dim y as date
y=cdate(x)
select from [tblname] WHERE [datetime field]=#" & y &"#
除非我复制存储在访问中的实际日期时间数据或使用“>或<”
,否则查询将不会产生任何记录,假设有多个记录的日期为1/1/2014而不是有什么方法可以在我的SQL查询中将datetime字段格式化为短日期以便于比较?因为我相信存储的时间是我无法使用“=”
过滤它的原因答案 0 :(得分:1)
这可以作为参数查询更好。但由于我不知道如何或者如何使用Crystal Reports的Access参数查询,我建议您将日期值格式化为#yyyy-m-d#。
"select from [tblname] WHERE [datetime field]=" & Format(y, "\#yyyy-m-d\#")
如果您想在将[datetime field]
与y
匹配时忽略一天中的某个时段,则可以使用DateValue([datetime field])
来提供该日期的午夜。
"select from [tblname] WHERE DateValue([datetime field])=" & Format(y, "\#yyyy-m-d\#")
但是,如果您的表包含许多行,则不希望为每行评估DateValue
。相反,你可以做这样的事情,如果[datetime field]
被编入索引,它可以利用索引检索来提高性能。
"select from [tblname] WHERE [datetime field]>=" & Format(y, "\#yyyy-m-d\#") & " AND [datetime field]<" & Format(y + 1, "\#yyyy-m-d\#")