Azure data factory 如何在ADF2中获取一个月的最后一天的动态内容?

Azure data factory 如何在ADF2中获取一个月的最后一天的动态内容?,azure-data-factory,azure-data-factory-2,Azure Data Factory,Azure Data Factory 2,我想根据utcnow()时间戳获取一个月的最后一天 以下表达式中的“dd”应自动为月份的最后一天(28、30或31),而不是“dd”: 考虑到现在实际上是八月,我期望从表达式中得到以下结果: “2019-08-31T23:59:59.999”我建议最简单的方法是将日期及其各自的月末日期存储在表格或文件中(如数据湖或Blob存储中),然后使用查找任务获取日期。这将是最容易维护和调试的 如果你有一些计算在你的管道中,为什么不把它传递到毫无疑问会更容易的地方呢。例如,如果您有一个SQL数据库,则存储一

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

以下表达式中的“dd”应自动为月份的最后一天(28、30或31),而不是“dd”:

考虑到现在实际上是八月,我期望从表达式中得到以下结果:
“2019-08-31T23:59:59.999”

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

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

SELECT EOMONTH ( GETDATE() )
这有多容易?如果您使用的是Databricks,那么有一个简单的例子

如果您必须使用内置函数和表达式在Data Factory中进行内联操作,那么从技术上讲这是可能的,但我会先通过测试进行一些操作:

@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')
),这样您就可以对其进行测试,但您可以在完成测试后将
variables('inputDate')
替换为
utcnow()

    @adddays(startOfMonth(addToTime(utcnow(), 1, 'Month')), - 1, 'yyyy-MM-dd')
详情如下:


我已经为它设计了一个表达式,但它确实很复杂。我诚实的意见是,最好在数据库表中保留日期并进行查找以获得值。您在ADF中有点束手无策,因为日期函数还没有
addmonths
,但这在技术上是可能的。我将首先对它进行一些广泛的测试,可能稍后发布。不幸的是,我需要使用它,因为我向Elasticsearch数据库发送一个查询,在那里我需要(动态)日期范围。嗨@Michael,有机会考虑一下,我想出了一个更简单的表达式,用于4个函数调用,而不是原来的13个。
    @adddays(startOfMonth(addToTime(utcnow(), 1, 'Month')), - 1, 'yyyy-MM-dd')