2016-12-21 188 views
0

在下面的代碼中,我聲明瞭開始日期和結束日期。這兩個日期均來自系統日期。我每天運行這個代碼。從今天的日子到今天的日期每天運行代碼-400

Declaration type 1 
DECLARE @StartDate string = DateTime.Now.AddDays(-30).ToShortDateString(); 
DECLARE @EndDate string = DateTime.Now.AddDays(-33).ToShortDateString(); 

Declaration type 2 
DECLARE @StartDate string = DateTime.Now.AddDays(-30).ToString(yyyy/mm/dd); 
DECLARE @EndDate string = DateTime.Now.AddDays(-33).ToString(yyyy/mm/dd); 

DROP VIEW IF EXISTS dbo.test; 
CREATE VIEW IF NOT EXISTS dbo.test 
AS 
    EXTRACT ID1 int?, 
    ID2 int?, 
    MeasureDate DateTime, 
    Value float, 
    date DateTime 

    FROM 
      "adl://eclwpsdatalake.azuredatalakestore.net/testfolder/{date:yyyy}/{date:MM}/{date:dd}/Reading.csv" 

USING Extractors.Csv(silent : true, quoting : true, nullEscape : "/N"); 

@xyz = 
    SELECT *, 
     MeasureDate.ToShortDateString() AS DateShort 
    FROM test 
    WHERE Value!=-999 AND date BETWEEN @StartDate AND @EndDate; 

我想使用系統日期作爲開始日期和結束日期=(systemdate-400天)。在運行此代碼時,在作業圖中顯示空白輸入,最終文件大小爲0 MB。我的假設是「日期」列的格式與開始日期結束日期不匹配。

回答

1

您的結束日期在您的開始日期之前。

另外:

  • 使用強類型,而不是你的日期轉換爲字符串並依靠隱式轉換。
  • 避免在兩次調用之間發生午夜時避免調用DateTime.Now兩次以避免錯誤。

    DECLARE @NowDate DateTime = DateTime.Now; 
    DECLARE @StartDate DateTime = @NowDate.AddDays(-33); 
    DECLARE @EndDate DateTime = @NowDate.AddDays(-30); 
    
+0

其實'DateTime.Now'應該是在編譯時快照,以便你多少次在腳本中引用它直接,你應該只得到在腳本一個值,而不管。你觀察到不同的東西嗎? –

+0

@Michael Rys:不,這只是防守編程肌肉記憶;) –