Как использовать фильтр даты с MuleSoft OData (версия 2.0)
Я использую MuleSoft (3.9) OData (2.0) RAML и передаю запрос в базу данных Oracle. Добавление фильтра даты в URL&$filter=START_DATE le datetime'2016-01-01T11:00:00'
выдает ошибку базы данных:
Команда SQL неправильно завершена.
Как добавить фильтр даты в OData RAML?
Запрос к базе данных генерируется как select....where START_DATE <= datetime'2016-01-01T11:00:00'
, Нужно ли явно конвертировать, используя to_date
?
1 ответ
Используйте переменную ниже, чтобы проанализировать фильтр OData для фильтра SQL
%var odataFilterToSQLFilter = (odataFilter) ->
(( odataFilter replace "eq null" with "is null"
replace "ne null" with "is not null"
replace " eq " with " = "
replace " ne " with " != "
replace " gt " with " > "
replace " lt " with " < "
replace " ge " with " >= "
replace " le " with " <= "
replace " and " with " AND "
replace " or " with " OR " ) splitBy " " map (
("TO_DATE('" ++ (($ replace "datetime'" with "" ) replace "T" with " ") ++ ",'yyyy-MM-dd HH24:MI:SS')") when $ as :string contains "datetime" otherwise $
)) joinBy " "
%var toSQLWhere = (odataFilter) -> (" WHERE " ++ odataFilterToSQLFilter(odataFilter)) unless odataFilter == null otherwise ""
---
"SELECT " ++ generateSqlFields(filters.select) ++ " FROM $remoteEntityName"
++ (
(toSQLWhere(filters.filter))