如何在 ADF2 中获取每月最后一天的动态内容?



我想根据 utcnow() 时间戳获取一个月的最后一天。

在表达式 bellow 中代替"dd",应该自动显示月份的最后一天(28、30 或 31):

@{formatDateTime(adddays(utcnow(),-2), 'yyyy-MM-ddT23:59:59.999')}

考虑到它实际上是八月,我希望表达式得出以下结果:"2019-08-31T23:59:59.999">

@adddays(startOfMonth(addToTime(utcnow(), 1, 'Month')), - 1, 'yyyy-MM-dd')

更多在这里:

Azure 数据工厂 - 字符串、日期等的表达式

我建议最简单的方法是将日期及其各自的月末日期存储在表或文件中(例如在数据湖或 Blob 存储中),然后使用查找任务来获取日期。 这将是最容易维护和调试的。

如果您的管道中有一些计算,为什么不将其传递给无疑会更容易的地方。 例如,如果您有SQL数据库,请存储带有预先计算的月末日期列的日历表。 然后就像进行查找一样简单。 SQL Server和Azure SQL DB甚至内置了一个函数,因此您不必编写自己的函数:

SELECT EOMONTH ( GETDATE() )

这有多容易? 如果您使用的是 Databricks,这里有一个简单的示例。

如果绝对必须使用内置函数和表达式在数据工厂中内联执行此操作,那么这在技术上是可行的,但我会先通过测试进行一些操作:

@addDays(formatDateTime(addDays(formatDateTime(variables('inputDate'), 'yyyy-MM-28'),5), 'yyyy-MM-01T23:59:59.999'),-1)

这种更简单的方法(请参阅较旧的复杂版本的编辑)人为地将一天设置为 28,然后添加 5 天(总是在下个月登陆),然后将一天重置为 1,然后休息 1 天。

这已在 2000 年 1 月 1 日至 2040 年 12 月 31 日期间成功测试。

我建议使用变量(例如variables('inputDate')),这样您就可以对其进行测试,但是您可以在完成测试后用utcnow()替换variables('inputDate')

相关内容

  • 没有找到相关文章

最新更新