【问题标题】:retrieve access records that fall between user specified dates检索用户指定日期之间的访问记录
【发布时间】:2017-11-08 23:43:34
【问题描述】:

表格有一个日期字段,它是文本。 SQL 语句为:

"SELECT datefield, anotherfield FROM tablename WHERE CDate(datefield) BETWEEN #" & dateStart & "# AND #" & dateEnd & "#"

dateStartdateEnd 是字符串,例如“10/02/2017”和“10/4/2017”。我使用CDate 将字符串datefield 转换为日期,并在开始和结束日期字符串周围加上括号#,以便将它们视为日期。从字面上看,我已经尝试了 WHERE 子句的数十种不同变体,但都没有运气。任何建议表示赞赏。

【问题讨论】:

  • The table has a date field that is text 日期是不是文本,它们是日期。如果您希望它们表现得像日期一样,请将它们存储为日期并使用日期来轮询数据库。问题是"10/02/2017" 看起来总是小于"9/1/1935",因为"1" 小于"9"。请阅读How to Ask 并采取tour

标签: sql vb.net ms-access


【解决方案1】:

我当然同意不应将日期存储为文本。但是,如果您坚持使用表格设计,那么您将需要对所有三个“日期”字段使用 CDate:

SELECT CDate([datefield]) AS myDate, anotherfield
FROM Table2
WHERE (((CDate([datefield])) Between CDate([dateStart]) And CDate([dateEnd])));

【讨论】:

    【解决方案2】:

    我还使用了您在 mySQL 中存储和检索日期的方法。但是,我只使用了一个字段而不是您的观点dateStartdateEnd。我建议您只创建一个字段来存储日期。以下是我如何使用 VB.NET 设法捕获这些日期之间的值。

    SELECT datefield, anotherfield FROM tablename WHERE datestoredfield BETWEEN '" & selectedDateFrom.toString("MM/dd/yyyy") & "' AND '" & selectedDateTo.toString("MM/dd/yyyy") & "';
    

    我在所选日期的末尾标出了.toString("MM/dd/yyyy"),因为您当前在日期字段中存储的日期格式是MM/dd/yyyy

    【讨论】:

    • 除非使用yyyy-mm-dd 格式,否则这永远不会起作用。不过,请参阅@Plutonix 的评论
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    相关资源
    最近更新 更多