获取上个月的年份(1月1日)

时间:2016-01-22 15:17:33

标签: sql sql-server reporting-services

我目前正在SSRS中建立年度报告。我正在寻找编辑默认" FROM"日历选择中的日期。

我希望找回前几个月的1月1日。例如:

(如果是2016年2月16日......结果应 1/120

如果是2016年1月10日..结果应为 2015年1月1日

我建立了这个以检索当前年份为1月1日,但如果我们在1月份因为我需要它来检索上个月的年份(在这种情况下它将是2015年,而不是2016年)它会导致问题)。

谢谢!

3 个答案:

答案 0 :(得分:1)

试试这个,它应该可行

return [

<强>更新

根据你的评论,我创建了这个表达式。它没有经过测试但应该有效。

=DateAdd(DateInterval.Month,-1,DateSerial(Year(Today), Month(Today), 1))

如果有帮助,请告诉我。

答案 1 :(得分:0)

我们想要使用具有格式的Date Serial = DateSerial(YYYY,MM,DD) 月份总是一月 这一天总是第一天 如果月份是1月份,那就是去年。否则,这是今年。 因此,假设我们有一个带有名为Date的参数的SSRS报告,我们可以为您的1月日期创建一个新字段,如下所示:

=iif(Month(Parameters!Date.Value)=1, 
    dateserial(Year(Parameters!Date.Value)-1,1,1),
    dateserial(Year(Parameters!Date.Value),1,1))

如果要在使用T-SQL(版本2012)或更高版本的查询中执行此操作:

case when month(@DATE) = 1 
    then DATEFROMPARTS(YEAR(@DATE)-1,1,1)
    else DATEFROMPARTS(YEAR(@DATE),1,1) 
 end

OR,在早期版本中

  CASE WHEN MONTH(@DATE) = 1 
        THEN CAST(CAST((YEAR(@DATE)-1)*10000 + 101 AS CHAR(8)) AS DATE) 
        ELSE CAST(CAST((YEAR(@DATE)*10000+ 101) AS CHAR(8)) AS DATE) 
    END

答案 2 :(得分:0)

select cast(cast(year(dateadd(mm, -1,getdate())) as varchar)+'-01-01' as date)

将getdate()替换为您基于此计算的字段。

进行测试:

select cast(cast(year(dateadd(mm, -1,'2015-01-22')) as varchar)+'-01-01' as date)
select cast(cast(year(dateadd(mm, -1,'2016-02-01')) as varchar)+'-01-01' as date)
select cast(cast(year(dateadd(mm, -1,'2015-12-12')) as varchar)+'-01-01' as date)