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

OData日期过滤语法错误:DateTime查询解析失败求助

OData查询中DateTime语法错误修正方案

问题描述

尝试将DateTime值传入OData查询的$filter参数时持续报错,错误信息如下:

{"code":"BadRequest","message":"Syntax error at position 13 in 'Date ge 17-01-2024 00:00:00'."}

使用的代码示例:

DateTime date1 = new DateTime(2024,01,17);
// 获取行数据
var data = context.Kapbehov.AddQueryOption("$filter", "Date ge "+date1);

已尝试过的调整:在日期前添加datetime关键字、更换日期格式等,但问题未解决。

目标数据表来自Business Central Web服务的OData端点,相关字段结构:

"Starting_Time": "07:00:00",
"Starting_Date_Time": "2024-01-23T07:00:00Z",
"Ending_Time": "08:35:00",
"Ending_Date_Time": "2024-01-23T08:35:00Z",
"Date": "2024-01-23",

修正方案

根据Business Central的OData语法规范,针对不同类型的日期字段,需要使用对应的格式:

1. 针对仅日期的Date字段(字符串格式YYYY-MM-DD)

有两种可行写法:

写法一:使用datetime关键字包裹日期值

DateTime date1 = new DateTime(2024, 01, 17);
// 格式化日期为YYYY-MM-DD并构造过滤语句
var filter = $"Date ge datetime'{date1:yyyy-MM-dd}'";
var data = context.Kapbehov.AddQueryOption("$filter", filter);

写法二:直接匹配字符串格式的日期

因为目标Date字段存储的是字符串类型的日期,也可以直接用字符串匹配:

DateTime date1 = new DateTime(2024, 01, 17);
var filter = $"Date ge '{date1:yyyy-MM-dd}'";
var data = context.Kapbehov.AddQueryOption("$filter", filter);

2. 针对带时间的字段(如Starting_Date_Time)

如果需要过滤带时间戳的字段,需使用datetime'YYYY-MM-DDTHH:mm:ssZ'格式:

DateTime dateTime1 = new DateTime(2024, 01, 23, 7, 0, 0, DateTimeKind.Utc);
var filter = $"Starting_Date_Time ge datetime'{dateTime1:yyyy-MM-ddTHH:mm:ssZ}'";
var data = context.Kapbehov.AddQueryOption("$filter", filter);

关键注意点

  • 禁止直接拼接DateTime对象,默认的日期格式(如17-01-2024 00:00:00)不符合OData语法要求
  • 必须用单引号包裹日期值,配合datetime关键字(针对日期时间类型字段)或直接匹配字符串(针对字符串类型日期字段)

内容的提问来源于stack exchange,提问作者user16483107

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 04:24:16