【问题标题】:Issue comparing dates with the same format比较具有相同格式的日期的问题
【发布时间】:2012-12-02 20:02:15
【问题描述】:

我正在尝试过滤具有时间间隔的表单

开始日期和结束日期都在文本框中,格式为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 字段

谢谢

【问题讨论】:

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


    【解决方案1】:

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

    在日期格式和“显示日期选择器”属性设置为“日期”的情况下,Access 版本 >= 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\#")
    

    【讨论】:

    • 谢谢!它仅适用于格式模式中的#。我自己永远也找不到。
    猜你喜欢
    • 1970-01-01
    • 2014-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多