Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 当前年度第一天和最近季度最后一天的SSIS表达式_Sql Server_Ssis_Expression - Fatal编程技术网

Sql server 当前年度第一天和最近季度最后一天的SSIS表达式

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,

我需要使用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, 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)