Postman发送GET请求时如何向datetime字段仅传递日期参数
问题原因
直接对datetime类型的changedate字段传入日期字符串做等值匹配不生效,是因为字段存储值带有时分秒毫秒信息,接口会将你传入的2022-06-18默认解析为2022-06-18 00:00:00.0,只能匹配当天零点整的记录,无法匹配当天其他时间点生成的数据。
可行解决方案
方案1:范围查询(优先推荐)
这是兼容性最好、查询性能最高的写法,不会破坏字段上的数据库索引,兼容所有OSLC 2.0及以上版本、Maximo 7.6+版本。
将原来的等值条件替换为时间范围条件:匹配大于等于查询日期零点、小于次日零点的所有记录。
修改后的完整请求URL如下:
https://hostname/oslc/os/table?oslc.select=assetnum,location&oslc.where=assetstatus.code="ABC" and siteid="XXXX" and assetstatus.location="204345104" and assetstatus.changedate>="2022-06-18T00:00:00" and assetstatus.changedate<"2022-06-19T00:00:00"
方案2:日期函数截断匹配
如果你的环境OSLC接口支持date()截断函数,可以直接将字段值转为日期格式后做等值匹配,写法更简洁。
条件中使用date(字段名)的格式包裹datetime字段即可,修改后的完整请求URL如下:
https://hostname/oslc/os/table?oslc.select=assetnum,location&oslc.where=assetstatus.code="ABC" and siteid="XXXX" and assetstatus.location="204345104" and date(assetstatus.changedate)="2022-06-18"
注意事项
- 生产环境优先选择范围查询方案,函数写法会导致数据库无法使用
changedate字段上的索引,数据量大时查询速度会明显变慢 - 使用函数写法前建议先在测试环境验证,部分低版本OSLC实现不支持在where条件中直接对字段使用日期处理函数
内容的提问来源于stack exchange,提问作者max092012
相关产品推荐
相关产品推荐

