Sql 条件表达式、访问中的数据类型不匹配

Sql 条件表达式、访问中的数据类型不匹配,sql,ms-access,Sql,Ms Access,我写了这个查询 SELECT dayar FROM dayarim WHERE ( Year(enter_month) = Year(Now()) ) OR ( Year(enter_month) < Year(Now()) AND Year(left_month) >= Year(Now()) ) AND ( Datediff('m', Iif(Year(enter_month) = Year(Now()), enter_mo

我写了这个查询

SELECT dayar 
FROM   dayarim 
WHERE  ( Year(enter_month) = Year(Now()) ) 
    OR ( Year(enter_month) < Year(Now()) 
         AND Year(left_month) >= Year(Now()) ) 
       AND ( Datediff('m', Iif(Year(enter_month) = Year(Now()), enter_month, 
                                 '1/1/' + Year(Now())), Now()) * 50 ) < ( 
           Datediff('m', '1/1/' + Year(Now()), Now()) * 50 ) 
我得到了这个错误:

条件表达式中的数据类型不匹配

我在google中搜索,发现这个错误意味着equal to表达式与字段数据类型不匹配

我的桌子:

我的数据:

我正试图得到一份没有付钱的名单 他们每个月需要支付50英镑,所以结果将是未支付的名单

编辑 由于Gustav的评论,我理解我没有检查他们支付的金额

 SELECT dayar 
 FROM   dayarim 
 WHERE  ( Year(enter_month) = Year(Now()) ) 
    OR ( Year(enter_month) < Year(Now()) 
         AND Year(left_month) >= Year(Now()) ) 
       AND (SELECT Sum(payments.sum) 
            FROM   payments 
            WHERE  payments.paymentdate > '1/1' + Year(Now()) 
                   AND paymentdate <= Now() 
                   AND payerid = dayarim.id) < ( 
           Datediff('m', '1/1/' + Year(Now()), Now()) * 50 ); 
但仍然会出现相同的错误

请尝试:

SELECT 
    dayar 
FROM   
    dayarim 
WHERE
   Year(Nz(left_month, Date())) >= Year(Date())
   AND
   Year(enter_month) <= Year(Date()) 
   AND
   (SELECT Sum(payments.sum) 
    FROM   payments 
    WHERE  Year(payments.paymentdate) = Year(Date())
        AND payerid = dayarim.id) < (Month(Date()) - 1) * 50
正确的查询是:

SELECT dayar 
FROM   dayarim 
WHERE  ( Year(enter_month) = Year(Now()) ) 
    OR ( Year(enter_month) <= Year(Now()) 
         AND Year(left_month) = Year(Now()) ) 
       AND (SELECT Sum(payments.sum) 
            FROM   payments 
            WHERE  payments.paymentdate > Dateserial(Year(Now()), 1, 1) 
                   AND paymentdate <= Now() 
                   AND payerid = dayarim.id) < ( Datediff('m', 
                                                 Dateserial(Year(Now( 
                                                 )), 
                                                 1, 1), Now()) * 50 ); 
我只是用DateSerial函数及其工作原理来替换日期的填充


多亏了Joe4

你似乎把所有关于日期和年份的事情都搞混了,并且以一种非常复杂的方式误用了文本。请问你想做什么?@Gustav,我想弄清楚,从年初到本月,人们都没有付钱,但入月和离月是什么?日期、年份或?示例数据和期望的结果将有助于解释您试图执行的操作。@Gustav日期/时间,查看我的编辑,我发布了表结构。它没有抛出任何错误,但也不能正常工作,我将粘贴我的解决方案,现在有朋友帮助我