【问题标题】:Access Date Comparison Error访问日期比较错误
【发布时间】:2015-02-04 15:45:32
【问题描述】:

我正在编写一个 sql 语句,我试图获取所有小于或等于开发日期的项目。但是,我收到一个错误

“标准表达式中的数据类型不匹配”

我找了又找,还是什么都没找到。

原始结果如下所示:

| Title | devTerm | pilotTerm |
+-------+---------+-----------+
| Ex1   | 201401  | 201404    |
| Ex2   | 201301  | 201401    |
| Ex3   | 201504  | 201601    |

这是我的查询:

SELECT *
FROM projects
WHERE Len(devTerm)>0
AND Len(pilotTerm)>0
AND Date() >= CDate(DateSerial(Left(devTerm,4),Right(devTerm,2),1))

我做错了什么?

附言如果没有必要,我不会使用 Access。

我参考这篇文章:Convert Text to date

截图:

【问题讨论】:

  • 您的列是什么数据类型?如果 devTerm 和 PilotTerm 不是文本,则可能会引发错误。
  • 它们都是“短文本”
  • @Ditto 如果不是文本,为什么会抛出错误?在我的即时窗口中,我测试了 MsgBox CDate(DateSerial(Left("201401", 4), Right("201401", 2), 1))MsgBox CDate(DateSerial(Left(201401, 4), Right(201401, 2), 1)) 都有效。
  • @newd 不确定它是否会隐式转换它们。 Chase:为什么要使用 CDATE 将 DateSerial 的返回值转换为日期?已经是约会了?
  • @Ditto 是的,好点,我只是把它放在那里试一试,但在发布之前我忘了把它取下来。

标签: sql date ms-access ms-access-2013


【解决方案1】:

到目前为止,我能够重现此问题的唯一方法是创建一个快速测试功能,看看它可能存在哪些可能性。从这里我觉得必须有一个空白或无效的记录,重新创建它的函数如下:

Public Function Test()

    If Date >= DateSerial(Left("201401", 4), Right("201401", 2), 1) Then
        MsgBox DateSerial(Left("", 4), Right("", 2), 1)
    End If

End Function

它进入 if 语句,然后因类型不匹配而中断。因此,空白记录可能会导致此记录或无效记录。

【讨论】:

    【解决方案2】:

    好的,我发现了这个问题。从我的问题下的 cmets 中,我能够考虑 Nz() 函数。最终查询看起来像

    SELECT *
    FROM projects
    WHERE Date() >= DateSerial(Left(Nz(devTerm, "1990"),4),Right(Nz(devTerm, "01"),2), 1)
    AND Date() < DateSerial(Left(Nz(pilotTerm, "1990"),4),Right(Nz(pilotTerm, "01"),2), 1)
    

    pilotTerm 和 devTerm 抛出 NULL,这就是问题所在。我认为 Access SQL 会过滤掉它们

    Len(devTerm)>0
    AND Len(pilotTerm)>0
    

    【讨论】:

      【解决方案3】:

      这显然是Left()Right() 由于Null 值而无法返回正确值的问题。你可以用这个,

      SELECT 
          *
      FROM
          projects
      WHERE 
          DateSerial(Left(Nz([devTerm], 205812), 4), Right(Nz([devTerm], 205812), 2), 1) <= Date()
      

      Nz() 将考虑到它们具有 Null 值这一事实,并在未来创建一个日期,该日期将始终大于 Date()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-12
        • 2017-06-23
        • 1970-01-01
        • 2023-03-27
        • 1970-01-01
        • 1970-01-01
        • 2017-06-28
        • 1970-01-01
        相关资源
        最近更新 更多