我们一直在使用MS Access,其MTD数据的语法如下:
Between DateSerial(Year(Date()),Month(Date()),1)
And DateSerial(Year(Date()),Month(Date())+1,0)
我们需要将上述逻辑转换为自动电子邮件报告的SQL / SSRS,但我无法使用此DateSerial逻辑来使用SQL。
在SQL查询的Filter字段中,我可以成功地将BETWEEN '8/1/2014' AND '8/31/2014'
用于MTD数据,但是希望应用DateSerial
逻辑,这样就不需要为每个人创建报告月,季度,年等等。
尝试使用DateSerial
函数时,我们会收到错误“无效或缺少表达式”。我已经看到了一些关于这方面需要参数的主题,但我确实认为这是过滤器字段的一个简单语法问题,因为实际日期与BETWEEN命令一起使用。
答案 0 :(得分:0)
您可以使用CONVERT函数:
http://msdn.microsoft.com/en-us/library/ms187928.aspx
如果您使用的是SQL Server 2012,则为DATEFROMPARTS函数:
http://msdn.microsoft.com/en-us/library/hh213228.aspx
或DATEADD:
select DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0); -- first day of current month
select DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE()), -1) -- last day of current month
我最后一次拍摄:https://stackoverflow.com/a/11746042/1274092
见我的:
答案 1 :(得分:0)
有几种不同的方法可以解决这个问题。这只是一种方式。
获取今天的约会。在这种情况下8/27/2014
Declare @Today date = cast(getdate() as date)
获取本月的第一天,过去26天
Declare @StartDate date = dateadd(d, -1 * (day(@Today) - 1), @Today)
select @Today, @StartDate
答案 2 :(得分:0)
这已经解决了。 ODBC驱动程序显然不能很好地与SSRS配合使用。 DateSerial命令在查询本身中不起作用。解决方法是将过滤器添加到数据集。此语法有效,但仅在数据集过滤器中:[expression]在[first value box] = DateSerial(Year(Now()),1,1)之间[第二个值框] = DateSerial(Year(Now()) ),12,31)
这为我们提供了我们所需的YTD报告数据。