【发布时间】:2019-09-27 22:19:19
【问题描述】:
我正在使用 OData Query v4 和 SQL Server 2012 运行一个简单的 .NET Core WebApi 应用程序。
这可行,但速度极慢:
GET /api-endpoint?$filter=date(MyDateTimeField) ge 2018-01-01&$top=100
以上 URL 生成的 SQL 查询:
SELECT TOP 100 * FROM MyTable WHERE ((((DATEPART(year, [MyDateTimeField]) * 10000) + (DATEPART(month, [MyDateTimeField]) * 100)) + DATEPART(day, [MyDateTimeField])) >= (((2018 * 10000) + (1 * 100)) + 1))
当我尝试这样做时:
GET /api-endpoint?$filter=MyDateTimeField ge 2018-01-01T00:00:00.00Z&$top=100
它会生成以下 SQL 查询:
SELECT TOP 100 * FROM MyTable WHERE [MyDateTimeField] > '2018-01-01T00:00:00.0000000'
返回此错误:
从字符转换日期和/或时间时转换失败 字符串。
生成与此类似的 SQL 查询的 OData 查询语法是什么?
SELECT TOP 100 * FROM MyTable WHERE [MyDateTimeField] > '2018-01-01'
【问题讨论】:
-
不确定我是否在问一个愚蠢的问题:为什么不使用
datetime2?如果您使用datetime2,您的查询应该可以正常工作。 -
嗨@itminus,这是一个旧数据库,我无权更改它。
标签: asp.net-core odata asp.net-core-webapi odata-v4