我正在查询一个表以获取试用期的开始和结束日期,然后计算到中间点的月数、中间点的日期以及中间点距离现在有多少个月。
这是来自 Microsoft Access 格式的 mdb 数据库文件,我使用 MDB Viewer Plus 来查看和操作数据。该程序在执行查询方面表现得很好。
这是一个有效的查询,后面是具有准确值的输出表的屏幕截图。在此特定视图中,数据类型为
date
或 number
。
select ReceiptDate,SupervisionTerminationDate
, DateDiff("m",[ReceiptDate],[SupervisionTerminationDate]) as ProbationLength
, int(ProbationLength/2) as HalfProbationLength
, DateAdd("m",HalfProbationLength,[ReceiptDate]) as HalfProbationDate
, int(DateDiff("m",HalfProbationDate,NOW())) as HalfProbationMonthsTillNow
from list3
where len([SupervisionTerminationDate]) > 0 and len([ReceiptDate]) > 0
and Year([SupervisionTerminationDate]) > 2022
但现在我需要找出从 Now() 或从 Now() 到缓刑中点为止有多少个月。我将使用为列名称设置的别名,例如“HalfProbationMonthsTillNow”作为 DateDiff() 中的整数来简单地添加或减去 Now(),但显然 MS Access 不允许声明变量,所以我必须拼写出整个计算,就像这样(这是 sql 的最后一行):
select ReceiptDate,SupervisionTerminationDate
, DateDiff("m",[ReceiptDate],[SupervisionTerminationDate]) as ProbationLength
, int(ProbationLength/2) as HalfProbationLength
, DateAdd("m",HalfProbationLength,[ReceiptDate]) as HalfProbationDate
, int(DateDiff("m",HalfProbationDate,NOW())) as HalfProbationMonthsTillNow
from list3
where len([SupervisionTerminationDate]) > 0
and len([ReceiptDate]) > 0
and Year([SupervisionTerminationDate]) > 2022
and DateDiff("m",DateAdd("m",DateDiff("m",[ReceiptDate],[SupervisionTerminationDate])/2,[ReceiptDate]),NOW()) < 9
...但是当我运行最后一行存在的查询时,它会抛出“条件表达式中的数据类型不匹配”错误:
如果我去掉最后一个
WHEN
条件的比较器部分,并将其放置在其中一条场线中,它的输出就很好。它看起来像一个适当的整数。但是当我将它与整数进行比较时,比如 > 9
它会抛出错误。
我尝试过,首先创建像您一样的表并插入相同的数据,一切正常。 为了进行实际测试,您应该有可用的文件,看看是否可以发布示例。