将 DateDiff 值与整数进行比较时,条件表达式中的数据类型不匹配

问题描述 投票:0回答:1

我正在查询一个表以获取试用期的开始和结束日期,然后计算到中间点的月数、中间点的日期以及中间点距离现在有多少个月。

这是来自 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

enter image description here

但现在我需要找出从 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

...但是当我运行最后一行存在的查询时,它会抛出“条件表达式中的数据类型不匹配”错误:

enter image description here

如果我去掉最后一个

WHEN
条件的比较器部分,并将其放置在其中一条场线中,它的输出就很好。它看起来像一个适当的整数。但是当我将它与整数进行比较时,比如
> 9
它会抛出错误。

sql ms-access
1个回答
0
投票

我尝试过,首先创建像您一样的表并插入相同的数据,一切正常。 为了进行实际测试,您应该有可用的文件,看看是否可以发布示例。

© www.soinside.com 2019 - 2024. All rights reserved.