You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rest-Assured中如何实现日期部分查询而非精确时间匹配?

ServiceNow Table API 日期范围查询(无需精确时间)

直接传入start_time=2023-09-02 05不会生效(除非你的自定义表Mytable有对应的字段或参数配置),ServiceNow Table API 查询日期字段的标准方式是使用范围查询,而非通配符或自定义参数,具体方案如下:

核心解决方案

ServiceNow 要求通过sysparm_query参数构建查询条件,针对sys_created_on字段的部分日期搜索,你可以指定时间范围来覆盖目标时间段:

  • 查询2023-09-02当天所有记录:sys_created_on>=2023-09-02 00:00:00^sys_created_on<2023-09-03 00:00:00
  • 查询2023-09-02 05点整到06点整的记录:sys_created_on>=2023-09-02 05:00:00^sys_created_on<2023-09-02 06:00:00
  • 多条件用^分隔,同时保留Tags=Mytag的过滤条件

修改后的测试代码

@Test()
public void getStatus(){
    String tableName = "Mytable";
    String tagValue = "Mytag";
    // 构建日期范围查询条件:查询2023-09-02当天的记录
    String query = String.format("sys_created_on>=2023-09-02 00:00:00^sys_created_on<2023-09-03 00:00:00^Tags=%s", tagValue);

    RequestSpecification request = RestAssured.given().auth().basic("username", "password");

    // 使用sysparm_query参数传递查询条件
    Response response = request
            .queryParam("sysparm_query", query)
            .get("https://helloworld.com/api/now/table/" + tableName);

    // 验证响应状态码
    response.then().statusCode(200);
  
    JsonPath jsonPathEvaluator = response.jsonPath();
    String actualExecutionStatus = jsonPathEvaluator.get("result.status[0]");
    String actualsys_created_on = jsonPathEvaluator.get("result.sys_created_on[0]");
    System.out.println("actualExecutionStatus =="+actualExecutionStatus);
    System.out.println("actualsys_created_on =="+actualsys_created_on);
    System.out.println("response body=="+response.getBody().asString());
}

补充说明

  1. ServiceNow Table API 默认不支持日期字段的通配符模糊搜索,范围查询是官方推荐的标准方式,同时能保证查询效率(日期字段通常建有索引)。
  2. 如果需要更灵活的日期范围(比如近7天、当月),可以使用ServiceNow的日期函数,例如sys_created_on>=@d-7(近7天)、sys_created_onONToday@(当天)。

内容的提问来源于stack exchange,提问作者Sameera De Silva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 22:42:08