SSIS表达式上一个日期没有DateAdd()

时间:2017-05-02 12:28:16

标签: sql-server string datetime variables ssis

目前正在开发一个将表达式从前一个日期传递到文件名的包。我当前的代码是以下字符串变量:

  

(DT_WSTR,20)DATEPART( “YYYY”,DATEADD( “DD”, - 1,DATEADD( “MM”,DATEDIFF( “MM”,   (DT_DATE)“1900-01-01”,getdate()) - 2,(DT_DATE)“1900-01-01”)))   + RIGHT(“0”+(DT_WSTR,20)DATEPART(“MM”,Dateadd(“DD”, - 1,dateadd(“MM”,datediff(“MM”,(DT_DATE)“1900-01-01”, getdate()) - 5,(DT_DATE)“1900-01-01”))),2)   +“01”

目前产生的输出为:

  

20171101

目前这是不正确的,因为我希望日期来自上一年:

  

20161101

这是我想要的论坛:

从今天起,返回过去7个月的第1天。

示例:2017年2月2日将返回11/1/2017; 6/21/2017将于12/1/2016返回; 2017/10/10将返回1/1/2017;等

这可以通过SSIS中的变量来完成吗?

2 个答案:

答案 0 :(得分:0)

您的表达式可以修改(和简化)到此

(DT_WSTR, 8)( ( YEAR( DATEADD( "MM", -7, GETDATE() ) ) * 10000 ) + ( MONTH( DATEADD("MM", -7, GETDATE() ) ) * 100 ) + 1 )
  • 从当前日期减去7个月
  • 将结果年乘以10000
  • 从当前日期减去7个月
  • 将结果乘以100
  • 添加年份值,月份值和1(第一天)
  • 转换为字符串

Yesterday's date in SSIS package setting in variable through expression中感谢@Rangani“乘以并添加而不是字符串连接”技巧

答案 1 :(得分:0)

SELECT LEFT(CONVERT(VARCHAR, DATEADD("MM", -6, '2017-05-02'), 112), 6) + '01'
SELECT LEFT(CONVERT(VARCHAR, DATEADD("MM", -6, '2017-06-21'), 112), 6) + '01'
SELECT LEFT(CONVERT(VARCHAR, DATEADD("MM", -6, '2017-07-10'), 112), 6) + '01'