我最终取消了WHERE子句中给我带来问题的部分,但最初我通过做一些对我来说毫无意义的事情来使此查询正常工作,并希望有人能对此有所了解正在这里。整个查询和功能都在下面,但是我不确定所有这些都是必需的
因此,该查询以前一直有效,并且此WHERE子句仍在另一个查询中成功使用。现在在where子句的这一行中使用了多个函数,但是,如果我只使用以ModifiedStartDate开头的部分,则查询工作正常。所以看来问题出在ModifiedDate上。 WHERE子句中给我们带来问题的部分是:
and ModifiedDate(r.EXPIRATION_DATE, ModifiedStartDate(r.COMMENCEMENT_DATE,
PaySched_MaxFreq(r.RE_CONTRACT_KEY))) > #1/1/2019#
查询失败,错误为“条件表达式中的数据类型不匹配”。因此,仅做一些测试,我最终在WHERE子句中添加了以下部分:
and r.RE_CONTRACT_KEY NOT IN (1)
然后查询成功了?!?! 我真的不知道如何添加这一行来神奇地解决数据类型不匹配错误。没有RE_CONTRACT_KEY = 1,所以它不是不好的数据。
我进行了一些测试,并使用了ModifiedDate函数,并将其放入select子句中,它工作正常。我还使用DATEADD函数向SELECT子句添加了另一个字段,以确保函数结果仍被视为日期,并且确实如此。查询在下面,功能在下面。
SELECT DISTINCT ....
FROM ((((((PAYMENT_LINE_ITEM AS pli
INNER JOIN PAYMENT_SCHEDULE AS tps ON pli.PAYMENT_SCHEDULE_KEY =
ps.PAYMENT_SCHEDULE_KEY)
INNER JOIN RECONTRACT AS r ON pli.RE_CONTRACT_KEY = r.RE_CONTRACT_KEY)
INNER JOIN Conversion_ProductCategory AS cpc ON cpc.Value = pli.PAYMENT_TYPE)
INNER JOIN ManualEntry AS me ON me.LeaseID = r.RE_CONTRACT_ID)
LEFT JOIN Mapping_CostCenter AS mcc ON mcc.CostCenter = me.CostCenter)
INNER JOIN PIW_Exclusions AS pe ON pe.RE_CONTRACT_ID = r.RE_CONTRACT_ID)
LEFT JOIN FacilityCode_Address_xRef AS fca ON fca.[Facility Code] =
mcc.placecode & "-" & mcc.placecodedescription
WHERE pli.PAYMENT_TYPE in ("rent","storage","parking")
and ModifiedDate(r.EXPIRATION_DATE,
ModifiedStartDate(r.COMMENCEMENT_DATE,
PaySched_MaxFreq(r.RE_CONTRACT_KEY))) > #1/1/19#
and PE.Reason = "rent extension"
and r.RE_CONTRACT_KEY NOT IN (1) 'New line added that made query work
函数:
Public Function ModifiedDate(DateToModify As Date, DateToCompare As Date) As
Date
Select Case DateToModify
Case #2/28/2000#, #2/28/2004#, #2/28/2008#, #2/28/2012#, #2/28/2016#,
#2/28/2020#, #2/28/2024#, #2/28/2028#, #2/28/2032#, #2/28/2036#, #2/28/2040#,
#2/28/2044#, #2/28/2048#
DateToModify = DateAdd("d", 1, DateToModify)
End Select
If DatePart("d", DateAdd("d", 1, DateToModify)) = DatePart("d",
DateToCompare) Then
ModifiedDate = DateAdd("d", 1, DateToModify)
Else
ModifiedDate = DateToModify
End If
End Function
如果您感到好奇,那么最后一个有效的WHERE子句是:
WHERE pli.PAYMENT_TYPE in ("rent","storage","parking")
and r.EXPIRATION_DATE > #1/1/19#
and PE.Reason = "rent extension"