ms-access - 为什么此查询更改有效?
问题描述
我最终放弃了 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"
解决方案
推荐阅读
- javascript - 在每个 12 位数字 js 之前插入一个换行符
- flutter - 在类型定义中使用泛型时 Dart 抛出运行时异常
- tensorflow - 拟合具有多个输入的模型
- r - 对每个对象应用相同功能后自分配对象
- php - 将 WooCommerce 类别重定向到页面
- .htaccess - 使用正则表达式将 301 重定向到具有不同编号的新 url
- android - “地图插件尚不支持TargetPlatform.fuchsia”使用google_maps_flutter显示此文本而不是google map
- exoplayer2.x - Exoplayer 中的 MediaItem 和 MediaSource 有什么区别?
- postgresql - 如何在 heroku 上为我的 discord.py 机器人运行 postgres?
- python-3.x - 获取类型错误:函数在使用 image_slicer python 时恰好需要 6 个参数(给定 5 个)