Добрый день. есть вот такой пример запроса.
![]()
идея в том чтоб взять записи которые созданы после определенного времени.
в результате он генерирует следующий SQL запрос который не совсем подходит, так как он возвращает запись которая была возвращена в прошлой выборке (я вытаскиваю данные по 10 записей).
![]()
пример запроса, который создается
SELECT "Contact"."Name" "Name", "Contact"."QSoftGSTime" "QSoftGSTime", "Contact"."ContactPhoto" "ContactPhoto", "Contact"."Phone" "Phone", "Contact"."CreatedOn" "CreatedOn", COALESCE("SysCityLcz"."Name", "City"."Name") "City.Name" FROM "public"."Contact" "Contact" LEFT OUTER JOIN "public"."City" "City" ON ("City"."Id" = "Contact"."CityId") LEFT OUTER JOIN "public"."SysCityLcz" "SysCityLcz" ON ("SysCityLcz"."RecordId" = "City"."Id" AND "SysCityLcz"."SysCultureId" = '{F0EA9715-8757-474C-AEE9-743D672E48C9}') WHERE "Contact"."CreatedOn" > TO_TIMESTAMP('2023-02-06 21:21:02.149', 'YYYY-MM-DD HH24:MI:SS.FF3') ORDER BY "CreatedOn" ASC NULLS FIRST LIMIT 10
получается что при выборке данных проверяется только первые три цифры из милисекунд ('2023-02-06 21:21:02.149', 'YYYY-MM-DD HH24:MI:SS.FF3'). в итоге я получаю два раза одну и ту же запись. решение это указывать все 6 цифр милисекунд следующий запрос выполняется корректно и не приводит к дублированию данных
SELECT "Contact"."Name" "Name", "Contact"."QSoftGSTime" "QSoftGSTime", "Contact"."ContactPhoto" "ContactPhoto", "Contact"."Phone" "Phone", "Contact"."CreatedOn" "CreatedOn", COALESCE("SysCityLcz"."Name", "City"."Name") "City.Name" FROM "public"."Contact" "Contact" LEFT OUTER JOIN "public"."City" "City" ON ("City"."Id" = "Contact"."CityId") LEFT OUTER JOIN "public"."SysCityLcz" "SysCityLcz" ON ("SysCityLcz"."RecordId" = "City"."Id" AND "SysCityLcz"."SysCultureId" = '{F0EA9715-8757-474C-AEE9-743D672E48C9}') WHERE "Contact"."CreatedOn" > TO_TIMESTAMP('2023-02-06 21:21:02.149528', 'YYYY-MM-DD HH24:MI:SS.FF6') ORDER BY "CreatedOn" ASC NULLS FIRST LIMIT 10
я не нашел способа управлять количеством цифр милисекунд в запросе.
можете подсказать как это правильно сделать?
пока что как хак я решил генерировать запрос с помощью EntitySchemaQuery, делать esqResult.GetSelectQuery(_connection), с него получать текст запроса и в нем уже подменять значения с помощью регулярки. но это выглядит костылем, который не хотелось бы оставлять.
спасибо!
Нравится
Добрый день,
К сожалению пока возможности управления этим количеством символов нет. Поэтому нужно подумать над альтернативными решениями обхода проблемы - возможно увеличить лимит с 10 записей на большее количество, чтобминимизировать риск ошибки, можно попробовать еще модифицировать фильтр. Возможно поможет добавление сортировки по Id - это сделает порядок записей всегда одинаковым, или просто использовать встроенную постраничность.