2016-12-21 145 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:不,这只是防守编程肌肉记忆;) –