SSIS运算式会以YYYYMM

时间:2018-12-10 13:27:16

标签: sql-server ssis

我试图弄清楚如何获得SSIS表达式给出的每月的最后一天。

我将列作为整数接收,然后添加了“数据转换”步骤以将YYYMM转换为日期格式。 然后在派生列上,我的表达式是:

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])),"-","")

2 个答案:

答案 0 :(得分:0)

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

在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中:

类似。我现在没有办法确认。我待会儿编辑。

答案 1 :(得分:0)

假定此列已作为DT_DBDATE日期类型输入到“派生”列中,则以下表达式将获取该月的最后一天。该表达式本质上首先解析年和月,使用这些表达式通过在该日期加上一个月(现在是下个月)来建立一个新日期,然后减去一天,这是最后一个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))))