我正在创建一个新的逻辑应用程序,该应用程序读取Cell cell1 = new Cell(){ CellReference = "A1", StyleIndex = (UInt32Value)1U, DataType = CellValues.SharedString };
的表格,并将DateCreated < ADDDAYS(-60,GETDATE())
位更新为Archived
。
但是,我不能为我的生活弄清楚如何将该过滤器作为ODATA查询的一部分来实现。
这是我到目前为止所做的尝试:
1
但是,我得到DateCreated lt addDays(utcNow(),-60)
如何在文件管理器中过滤动态日期?
答案 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/