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

时间:2019-07-15 15:37:00

标签: c# azure azure-data-factory

我在数据工厂中创建了一个管道,我想从源中检索当月和上个月的数据。当我运行管道时,请提供所需的参数,名为ExtractDate。格式为MM / DD / YYYY。 在当月,我在“设置变量”活动中使用了以下表达式:

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

在上个月,我尝试过:

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

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

我试图考虑一种解决方案,但不幸的是,数据工厂中没有可用的“ addmonths”。

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

2 个答案:

答案 0 :(得分:0)

到目前为止,ADF不支持

addMonthsaddYears。请对此thread投票以推动进度。

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

这个月很简单:

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

输出:

enter image description here

上个月比较复杂,应该检查是否是一年的第一个月。

@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,则输出看起来像:

enter image description here

我的测试基于静态值,请用您的变量替换它。


仅作总结:

最终的动态工作内容应如下所示:

@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) )))) ))

答案 1 :(得分:0)

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

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