2017-02-09 39 views
3

我正在創建一個新的邏輯應用程序,該應用程序讀取表DateCreated < ADDDAYS(-60,GETDATE())並將Archived位更新爲1Azure Logic應用程序SQL ODATA過濾日期

但是,我不能爲我的生活弄清楚如何實現該過濾器作爲ODATA查詢的一部分。

這裏就是我試圖至今: DateCreated lt addDays(utcNow(),-60)

不過,我得到"An unknown function with name 'utcnow' was found. This may also be a function import or a key lookup on a navigation property, which is not allowed.\r\n inner exception: An unknown function with name 'utcnow' was found. This may also be a function import or a key lookup on a navigation property, which is not allowed."

我怎樣才能在文件管理器一個動態的日期過濾器?

回答

2

但是,我不能爲我的生活弄清楚如何實現該過濾器作爲ODATA查詢的一部分。

我想你是指在SQL連接器上的ODATA查詢?

你可以嘗試以下方法:

dateCreated會LT @ {addDays(utcNow(), - 60)}

+0

嗨史蒂芬,謝謝你的提示。我試過了,現在我得到了 Body { 「status」:400, 「message」:「使用提供的值無效混搭表達式。\ r \ n內部異常:我們不能應用operator <來鍵入DateTimeZone和DateTime。「, 」source「:」127.0.0.1「 } –

+0

您可以嘗試DateCreated le @ {addDays(utcNow(), - 60)} –

+0

是的,同樣的錯誤:(。值得什麼,DateCreated是在數據庫中可以爲空的DateTime –

0

基於以前的答案,你應該嘗試相同的命令:

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

但是,您還必須確保您的數據類型(在SQL方面)必須是datetimeoffset。

三種解決方案做到這一點:

  • 更改你的領域在你的表型,

  • 創建一個視圖,並投dateCreated會以DATETIMEOFFSET CREATE VIEW [DBO]領域[。 MyView的作爲 SELECT MyFields,...,CAST(dateCreated會AS DATETIMEOFFSET)AS dateCreated會 FROM 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函數檢索 部分數據類型。例如:

$過濾=年(上映時間)LT年(DTZ)

當然,你必須carful,以確保您所用的 正確的邏輯相對於timezone-但你可能知道的 那。

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

+0

SQL超出了我的控制範圍。如果我可以在邏輯應用程序中施加日期時間偏移量,那對我很有用,但我不能更改SQL方面 –

+0

我有同樣的問題。 –

+0

剛剛問過微軟。 –