Sql server 当前年度第一天和最近季度最后一天的SSIS表达式
我需要使用SSIS表达式获取一年中的第一个日期和最近一个季度的最后一天(例如“2019年1月1日至2019年9月30日”,因为今天是19年12月12日) 我可以使用下面这样的SQL语句来实现这一点Sql server 当前年度第一天和最近季度最后一天的SSIS表达式,sql-server,ssis,expression,Sql Server,Ssis,Expression,我需要使用SSIS表达式获取一年中的第一个日期和最近一个季度的最后一天(例如“2019年1月1日至2019年9月30日”,因为今天是19年12月12日) 我可以使用下面这样的SQL语句来实现这一点 SELECT CONVERT(VARCHAR(10), DATEADD(yy, DATEDIFF(yy,0,getdate()), 0), 101) +' to ' + CONVERT(VARCHAR(10), DATEADD(dd, -1, DATEADD(qq, DATEDIFF(qq, 0,
SELECT CONVERT(VARCHAR(10), DATEADD(yy, DATEDIFF(yy,0,getdate()), 0), 101) +' to ' + CONVERT(VARCHAR(10), DATEADD(dd, -1, DATEADD(qq, DATEDIFF(qq, 0, GETDATE()), 0)), 101) AS QuarterToDate
但是,我无法在SSIS表达式生成器中执行此操作。我正在使用下面的方法
CONVERT(VARCHAR(10), DATEADD(yy, DATEDIFF(yy,0,getdate()), 0), 101) +' to ' + CONVERT(VARCHAR(10), DATEADD(dd, -1, DATEADD(qq, DATEDIFF(qq, 0, GETDATE()), 0)), 101)
但我收到以下错误消息:
无法计算表达式
无法识别函数“VARCHAR”。函数名不正确或不存在
尝试将表达式“CONVERT(VARCHAR(10)、DATEADD(yy、DATEDIFF(yy、0、getdate())、0)、101)+解析为“+CONVERT(VARCHAR(10)、DATEADD(dd,-1、DATEADD(qq、DATEDIFF(qq、0、getdate())、101)”失败,并返回错误代码0xC004708A。无法分析表达式。它可能包含无效元素或格式不正确。也可能存在内存不足错误
重写上面的内容: 年度第一天:
DATEADD("year", DATEDIFF("year",(DT_DATE)2,getdate()), (DT_DATE)2)
最近一个季度的最后一天:
DATEADD("day", -1, DATEADD("quarter", DATEDIFF("quarter", (DT_DATE)2, GETDATE()), (DT_DATE)2))
将其转换为不同的格式需要一些创造性。您可能需要将其粘贴到变量中,并通过SUBSTRING()处理新变量 最短路径:YYYY-MM-DD
LEFT((DT_WSTR, 30)DATEADD("day", -1, DATEADD("quarter", DATEDIFF("quarter", (DT_DATE)2, GETDATE()), (DT_DATE)2)),10)
一年的第一天很容易
"01/01/" + (DT_WSTR,4) YEAR(GETDATE())
为了得到最近一个季度的最后一天,我将其存储为自己的变量,称为“EOQ”,以便以后更容易操作。它是YYYY-MM-DD
格式的字符串
(DT_WSTR,10) (DT_DBDATE) DATEADD("day", -1, DATEADD("quarter",DATEDIFF("quarter", (DT_DATE) 2, GETDATE()),(DT_DATE) 2))
然后,我们可以组合这些信息以获得所需的字符串(用于报告标题?)
结果:2019年1月1日至2019年9月30日
"01/01/" + (DT_WSTR, 4) YEAR(GETDATE()) + " to " + SUBSTRING(@[User::EOQ],6,2) + "/" + SUBSTRING(@[User::EOQ],9,2) + "/" + SUBSTRING(@[User::EOQ],1,4)