使用相同格式比较日期的问题

时间:2012-12-14 19:31:09

标签: sql-server date ms-access format ms-access-2010

我试图按时间间隔过滤表单

开始日期和结束日期都在格式为dd/mm/yyyy

的文本框中

我在VBA中的查询看起来像这样

WHERE (Format([SalesCallDate],'dd/mm/yyyy') BETWEEN #" & Format(txtStartDate, "dd/mm/yyyy") & "#
 AND #" & Format(txtEndDate, "dd/mm/yyyy") & "#)"

我无法弄清楚为什么当时间间隔为01/12/201221/12/2012时,我的日期为15/08/1991。这就是为什么我想明确这种格式的原因。

SQL查询的输出为
WHERE (Format([SalesCallDate],'dd/mm/yyyy') BETWEEN #01/12/2012# AND #21/12/2012#)

我尝试使用和不使用格式。

我错过了什么吗?

注意SalesCallDate是SQL Server链接表中的DateTime字段

谢谢

1 个答案:

答案 0 :(得分:1)

听起来txtStartDate和txtEndDate都是未绑定的文本框。将其格式属性设置为日期格式。

text box with Format set to General Date

使用日期格式并将“显示日期选择器”属性设置为“对于日期”,访问版本> = 2007将为您的文本框启用该日期选择器功能。如果您的用户喜欢这样,这是该格式属性的附带好处。

无论如何,日期格式将允许Access和VBA将这些文本框值解释为日期/时间数据类型:

? TypeName(Forms!frmDateRange!txtStartDate.Value)
Date

然后由于SalesCallDate是日期/时间类型,您的WHERE子句可以直接将字段与文本框值进行比较。

WHERE SalesCallDate BETWEEN
        Forms!frmDateRange!txtStartDate
    AND Forms!frmDateRange!txtEndDate

或者,如果您的表单包含构建包含SQL语句的字符串的代码,并且您希望日期范围的日期/时间文字...

"WHERE SalesCallDate BETWEEN " & _
    Format(Me.txtStartDate, "\#yyyy-m-d\#")
    " AND " & Format(Me.txtEndDate, "\#yyyy-m-d\#")
相关问题