根据提供的日期参数减去天数

Subtract number of days based on provided date parameter

我在数据工厂中创建了一个管道,我想从源中检索当前月份和上个月的数据。当我 运行 管道时,我给出了名为 ExtractDate 的所需参数。格式为 MM/DD/YYYY 。 对于当前月份,我在 'Set Variable' activity 中使用了以下表达式:

@replace(item().Query,'EXTRACTDATE',formatDateTime(variables('ExtractDate'), 'yyyyMM'))

上个月我试过:

@adddays(variables('ExtractDate'),-28)

例如,当用户将 运行 将管道设置为日期 07/31/2019 时,就会出现问题。那么上个月还是7月。如果我将数字增加到 31,则用户可能会引入 03/01/2019,并且从 3 月开始,它将跳过 2 月。

我试图想出一个解决方案,但遗憾的是数据工厂中没有 'addmonths' 可用。

有什么想法吗?...我在这个问题上花了 2 天时间..

addMonthsaddYears 不受 ADF 支持,因此 far.Please 投赞成票 thread 以推动进展。

我的诀窍是在 ADF 中使用 bulit-in functions 的组合。请看我的测试:

这个月很简单:

@concat(substring('07/16/2019',6,4),substring('07/16/2019',0,2))

输出:

上个月小complex.It应该检查一下是不是今年的第一个月

@if(equals(substring('07/16/2019',0,2),'01'), 
concat(
string(sub(
int(substring('07/16/2019',6,4)),1)),
'12'),
string(sub(
int(concat(substring('07/16/2019',6,4),
substring('07/16/2019',0,2))),1)
)
)

如果输入参数是 01/16/2019,则输出如下:

我的测试是基于静态值,请将其替换为您的变量。


总结一下:

最终的工作动态内容应该是这样的:

@if( equals(variables('SubstringMonth'),'01'), 
concat(string(sub(int(variables('SubstringYear')),1)),'12'), 
concat(variables('SubstringYear'),string(if(or(equals(sub(int(variables('SubstringMonth')),1),11),equals(sub(int(variables('SubstringMonth')),1),10)), 
sub(int(variables('SubstringMonth')),1) , 
concat('0',string(sub(int(variables('SubstringMonth')),1) )))) ))

从今天开始的前一个月,您可以使用

    formatDateTime(AddToTime(utcnow(), -1, 'Month'), 'yyyy-MM-dd')