SSIS表达式,用于获取给定YYYYMM的月份的最后一天



我正试图弄清楚如何使用SSIS表达式获得一个月的最后一天。

我收到的列是Integer,然后添加了一个数据转换步骤,将YYYYM转换为日期格式。然后在派生列上,我的表达式是:

REPLACE((DT_WSTR,10)(DT_DBDATE)DATEADD("D",-(DAY(DATEADD("M",1,[Copy of MONTH]))),DATEADD("M",1,[Copy of MONTH])),"-","")

在最后一张表上,我得到了24520504的值。

示例:我正在从.xls文件中获取派生列的值。在该文件中,我使用列MONTH,它是一个Integer(示例:201711(。在最后一张表上,它也是一个整数,但它有201711的最后一天(例如:20171131(

编辑:在你的帮助下,我重新制定了我的表达方式,但我仍然得到了一个错误:

REPLACE((DT_STR,10,1252)DATEADD("d",-1,DATEADD("m",1,(DT_DBDATE)(DT_STR,6,1252)[MONTH])),"-","")

假设此列作为DT_DBDATE日期类型输入到Derived列,则下面的表达式将获得该月的最后一天。这个表达式本质上首先解析年份和月份,通过在这个日期上添加一个月(现在是下个月(来构建新的日期,然后减去一天,这是DATEADD函数的最后一个角色,然后将日期返回到同一个月,但现在是最后一天。最后,外部DAY函数返回日期。

DAY(DATEADD("day",-1,DATEADD("month",1,(DT_DBDATE)((DT_STR,4,1252)YEAR((DT_DBDATE)YourDateColumn) + "-" + RIGHT((DT_STR,2,1252)MONTH((DT_DBDATE)YourDateColumn),2) + "-01"))))

更新:

对于使用YYYYDD格式存储日期的DT_R8数据类型,请使用以下表达式返回月份的最后一天。

DAY(DATEADD("day",-1,DATEADD("month",1,(DT_DBDATE)SUBSTRING((DT_STR,12,1252)LEFT((DT_STR,8,1252)YourDateColumn,4) + "-" + SUBSTRING((DT_STR,8,1252)YourDateColumn,5,2) + "-01",1,12))))

您从哪里开始(这将以日期格式返回月份的最后一个日期(?

在SQL中:

declare @YYYYMM as int = 201811
select dateadd(d,-1,dateadd(m,1,cast(cast(@YYYYMM as varchar(6))+'01' as date)))

这将把它一直带到int:

declare @YYYYMM as int = 201811
select cast(replace(cast(dateadd(d,-1,dateadd(m,1,cast(cast(@YYYYMM as varchar(6))+'01' as date))) as varchar(10)),'-','') as int)

在SSIS:中

它是相似的。不过我现在没有办法确认。我稍后会编辑。

这应该有效。。。

periodo ='201803'
DATEADD("day",-1,DATEADD("month",1,(DT_DBDATE)((DT_STR,4,1252)LEFT(period,4) + "-" + RIGHT(period,2) + "-01")))

最新更新