Я запускаю простое приложение .NET Core WebApi с OData Query v4 и SQL Server 2012.
Это работает, но очень медленно:
GET /api-endpoint?$filter=date(MyDateTimeField) ge 2018-01-01&$top=100
SQL-запрос, сгенерированный указанным выше URL-адресом:
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'
Который возвращает эту ошибку:
Ошибка преобразования при преобразовании даты и/или времени из строки символов.
Каким должен быть синтаксис запроса OData для создания запроса SQL, подобного этому?
SELECT TOP 100 * FROM MyTable WHERE [MyDateTimeField] > '2018-01-01'
datetime2
? Если вы используетеdatetime2
, ваш запрос должен работать нормально. - person itminus   schedule 10.05.2019