【问题标题】:SSIS Expression for date of previous Friday上周五日期的 SSIS 表达式
【发布时间】:2014-03-09 09:42:13
【问题描述】:

如何使用 SSIS 表达式获取上周五的日期? 使用以下表达式:

RIGHT("0" + (DT_WSTR, 2)  MONTH(dateadd("d", -1, getdate())), 2) 
+ RIGHT("0" + (DT_WSTR, 2) DAY(dateadd("d", -1, getdate())), 2)
+ RIGHT("1"+(DT_WSTR, 4)  YEAR(dateadd("d", -1, getdate())),2)+ ".csv"

上面表达式的输出是021014.csv

【问题讨论】:

  • 也许退后一步确定你的最终状态会更好。不加思索的快速射击问题不是这个网站的目的
  • 对不起,我已经完成了我的 ssis 包,但我已经在动态使用变量中完成了。
  • 在你提出一些问题之前,你必须做一些研究。为了得到上周五将是从下周五开始的 7 天或从今天减去日期......
  • + RIGHT("0" + (DT_WSTR, 2) MONTH(dateadd("d", -1, getdate())), 2) +RIGHT("0" + (DT_WSTR, 2) ) DAY(dateadd("d", -DATEPART(weekday,GETDATE()), getdate())), 2) +RIGHT("1"+(DT_WSTR, 4) YEAR(dateadd("d", -1, getdate())),2)+ ".csv"
  • 我在工作日收到无法识别的令牌作为错误

标签: sql-server tsql variables ssis sql-server-2012


【解决方案1】:

这个也可以用:

      @[User::Destination] + "_"+ (DT_WSTR,20)
     (
     DATEPART("dw",GETDATE())==1? RIGHT("0"+(DT_WSTR,2)Month (DATEADD ("D", -  1        GETDATE()) ),  2)
     +
     RIGHT ("0"+(DT_WSTR,2)DAY(DATEADD("D",-1,GETDATE())),2)
     +
     RIGHT("1"+(DT_WSTR,4)YEAR(DATEADD("D",-1,GETDATE())),2) 
     :
     DATEPART("dw",GETDATE())==2? RIGHT("0"+(DT_WSTR,2)    Month(DATEADD("D",-1,GETDATE())),2)   
    +
     RIGHT ("0"+(DT_WSTR,2)DAY(DATEADD("D",-2,GETDATE())),2)
    +
    RIGHT("1"+(DT_WSTR,4)YEAR(DATEADD("D",-1,GETDATE())),2) 
    :
    DATEPART("dw",GETDATE())==3? RIGHT("0"+(DT_WSTR,2)    >Month(DATEADD("D",-1,GETDATE())),2)
    +
    RIGHT ("0"+(DT_WSTR,2)DAY(DATEADD("D",-3,GETDATE())),2)
    +
    RIGHT("1"+(DT_WSTR,4)YEAR(DATEADD("D",-1,GETDATE())),2) 
    :
    DATEPART("dw",GETDATE())==4? RIGHT("0"+(DT_WSTR,2)    >Month(DATEADD("D",-1,GETDATE())),2)
     +
     RIGHT ("0"+(DT_WSTR,2)DAY(DATEADD("D",-4,GETDATE())),2)
     +
     RIGHT("1"+(DT_WSTR,4)YEAR(DATEADD("D",-1,GETDATE())),2) 
     :
     DATEPART("dw",GETDATE())==5? RIGHT("0"+(DT_WSTR,2)    >Month(DATEADD("D",-1,GETDATE())),2)
    +
     RIGHT ("0"+(DT_WSTR,2)DAY(DATEADD("D",-5,GETDATE())),2)
     +
     RIGHT("1"+(DT_WSTR,4)YEAR(DATEADD("D",-1,GETDATE())),2) 
     :
     DATEPART("dw",GETDATE())==6? RIGHT("0"+(DT_WSTR,2)Month (DATEADD("D",-1,GETDATE())),2)
      +
     RIGHT ("0"+(DT_WSTR,2)DAY(DATEADD("D",-6,GETDATE())),2)
      +
      RIGHT("1"+(DT_WSTR,4)YEAR(DATEADD("D",-1,GETDATE())),2)
      :
      DATEPART("dw",GETDATE())==7? RIGHT("0"+(DT_WSTR,2)    >Month( DATEADD(" D",-1,   GETDATE()     )),2)
        +
       RIGHT ("0"+(DT_WSTR,2)DAY(DATEADD("D",-7,GETDATE())),2)
        + 
        RIGHT("1"+(DT_WSTR,4)YEAR(DATEADD("D",-1,GETDATE())),2)
        : "" )
         +".csv"

【讨论】:

  • 格式化你的答案,否则人们会看到很多垃圾。
  • 你太棒了!
【解决方案2】:

这是使用 T-SQL,您仍需要转换为 SSIS。这更像是一个答案。但无法将其放入评论中。

DECLARE @CurrentDate DATE = '02/15/2014' --Saturday
--Returns Date for Friday that was last week. When current date is Saturday will return Friday that was 1 week ago.
SELECT DATEADD(dd,-DATEPART(weekday,@CurrentDate)-1,@CurrentDate)   --Output: 2014-02-07
--Returns Date for most recent Friday.
SELECT  DATEADD(dd,-(DATEPART(weekday,@CurrentDate)%7+1),@CurrentDate)  --Output: 2014-02-14

SET @CurrentDate = '02/11/2014' --Tuesday
SELECT DATEADD(dd,-DATEPART(weekday,@CurrentDate)-1,@CurrentDate)   --Output: 2014-02-07
SELECT  DATEADD(dd,-(DATEPART(weekday,@CurrentDate)%7+1),@CurrentDate)  --Output: 2014-02-07

您需要弄清楚获得星期五的要求是什么,是上一个完整周的星期五,还是只是上周五,而现在是本周或上一周。

【讨论】:

  • :我需要星期五,它是本周或前一周。我擅长 tsql 查询,但我想使用变量生成。
  • 在这种情况下,您需要第二个表达式SELECT DATEADD(dd,-(DATEPART(weekday,GETDATE())%7+1),GETDATE()),只需将GETDATE() 替换为您的变量或列即可。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-13
  • 2015-05-12
  • 1970-01-01
  • 2017-04-06
  • 2021-06-11
  • 1970-01-01
相关资源
最近更新 更多