在 ms 访问中不起作用的日期之间的比较

Posted

技术标签:

【中文标题】在 ms 访问中不起作用的日期之间的比较【英文标题】:comparison between dates not working in ms access 【发布时间】:2015-07-01 00:03:46 【问题描述】:

使用 Access 2013 我在 Access 中有表,其中列“DueDate”被定义为“日期/时间” 系统默认日期格式为 dd/mm/yyyy

想要通过 VBA 根据文本框“txtDueDateUpto”中的值更改列表的行源。 所以,我得到所有任务,其中花花公子日期小于等于用户在“txtDueDateUpto”中输入的日期

mysql = "SELECT TaskTbl.TaskID "
        & " FROM TaskTbl " _
        & " WHERE " _
        & " DueDate is not Null  and " _
        & " Format (DueDate," & """dd/mm/yyyy""" & ") <= " & Format(CDate(Me.txtDueDateUpto.Value), "dd/mm/yyyy") _

Me.listTask.RowSource = mySql

我有 3 个任务用于测试目的。 其中 DueDate 保存为

 TaskID DueDate
 1      25-17-2015
 2      01-07-2015
 3      29-06-2015

并且,txtDueDateUpto 中的值为 06-07-2015 txtDueDateUpto 格式属性设置为“短日期” 我期望使用给定的 SQL 返回 taskID 2,3,但我得到的是 taskID 2

我整晚都坐着,尝试了许多排列和组合,但不明白那是什么,我做错了。

Access VBA 的新手。请帮助,在此先感谢。

【问题讨论】:

【参考方案1】:

始终将日期处理为日期,而不是字符串,没有例外。

如果您的文本框已指定日期/时间格式,您甚至不必使用 CDate 或 DateValue,因为 Access 会读取数据类型为 Date 的值。

但是,您必须将该值与 SQL 代码连接为日期值的格式正确的字符串表达式:

mySql = "SELECT TaskTbl.TaskID "
        & " FROM TaskTbl " _
        & " WHERE " _
        & " DueDate is not Null and " _
        & " DueDate <= #" & Format(Me!txtDueDateUpto.Value, "yyyy\/mm\/dd") & "#"

【讨论】:

【参考方案2】:

如果您要将日期格式化为字符串 - 并比较它们 - 然后始终使用 YYYY-MM-DD 格式:

   & " Format (DueDate," & """yyyy-mm-dd""" & ") <= " & Format(CDate(Me.txtDueDateUpto.Value), "yyyy-mm-dd") _

但是,我很确定 MS Access 可以在不进行转换的情况下进行日期比较:

   DueDate <= CDate(Me.txtDueDateUpto.Value)

【讨论】:

我尝试将 / 替换为 -- ,但问题仍然存在。为了更好地理解,将在问题本身中添加我正在测试的数据。 @Adarsh 。 . .重点不是斜线与连字符。重点是将日期格式化为年月日。

以上是关于在 ms 访问中不起作用的日期之间的比较的主要内容,如果未能解决你的问题,请参考以下文章

带有日期字符串的 Android SQLite rawquery 在 WHERE 子句中不起作用

PHP比较运算符在MySQL条纹查询中不起作用

MS Access - 自动填充在组合框中不起作用

按键事件在日期选择器中不起作用

Jquery 日期规则在 Firefox 和 IE 中不起作用

更新查询在带有 MS Access 的 VB.NET 中不起作用