Azure Logic App SQL ODATA过滤日期

时间:2017-02-09 17:49:57

标签: azure odata azure-logic-apps

我正在创建一个新的逻辑应用程序,该应用程序读取Cell cell1 = new Cell(){ CellReference = "A1", StyleIndex = (UInt32Value)1U, DataType = CellValues.SharedString }; 的表格,并将DateCreated < ADDDAYS(-60,GETDATE())位更新为Archived

但是,我不能为我的生活弄清楚如何将该过滤器作为ODATA查询的一部分来实现。

这是我到目前为止所做的尝试: 1

但是,我得到DateCreated lt addDays(utcNow(),-60)

如何在文件管理器中过滤动态日期?

2 个答案:

答案 0 :(得分:2)

  

但是,我不能为我的生活找出如何在ODATA查询中实现该过滤器。

我想你的意思是SQL Connector上的ODATA查询?

您可以尝试以下方法:

DateCreated lt @ {addDays(utcNow(), - 60)}

答案 1 :(得分:0)

根据上一个答案,您应该尝试相同的命令:

DateCreated lt @{addDays(utcNow(),-60)}

但是,您必须确保SQL端的数据类型必须是datetimeoffset。

三种解决方案:

  • 更改表格中字段的类型

  • 创建一个视图并将DateCreated字段强制转换为DATETIMEOFFSET 创建视图[dbo]。[myview] AS SELECT MyFields,...,CAST(DateCreated AS DATETIMEOFFSET)AS DateCreated 来自MyTable

  • 使用DATETIMEOFFSET参数创建存储过程,并将参数转换为DATETIME

如果您无法更改SQL代码,那么这段代码就是解决方案:

year(DateCreated) lt year(@{addDays(utcNow(),-60)}) or (
    year(DateCreated) eq year(@{addDays(utcNow(),-60)}) and (
            month(DateCreated) lt month(@{addDays(utcNow(),-60)} or (
                month(DateCreated) eq month(@{addDays(utcNow(),-60)}
                ... <same thing for other date parts>
        )
    )
)

您必须比较日期的每个部分:

  

这是一个有趣的问题,有时会出现日期,   时间,日期时间和特定时区发挥作用。比较一个   DateTimeZone到日期是有问题的,因为它可能更少   算术术语,但仅限于时区匹配...没有它   关键信息,这些数据类型无法比较。

     

一种替代方法是使用标准OData函数进行检索   部分数据类型。例如:

     

$ filter = year(release_date)lt year(dtz)

     

当然,你必须要小心,以确保你正在实施   关于时区的正确逻辑 - 但你可能知道   这一点。

OData参考: http://www.odata.org/documentation/odata-version-2-0/uri-conventions/