如何在MuleSoft OData(2.0版)中使用日期过滤器

时间:2019-01-30 04:00:54

标签: odata raml mulesoft

我正在使用MuleSoft(3.9)OData(2.0)RAML,并将查询传递给Oracle数据库。在网址中添加日期过滤器 &$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 个答案:

答案 0 :(得分:0)

使用以下变量将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))