SSRS / TSQL日期格式

时间:2013-03-12 14:21:07

标签: tsql ssrs-2008 reporting reporting-services

在SSRS中使用以下示例查询会将月份作为单个数字(1-12)返回。我想要的是显示日期,就像2000年1月那样。我如何改变我的代码,以便能够从单个月号格式化为MMM YYYY格式?我在visual studio中尝试了格式化,但它目前正在以MMM YYYY的形式返回。

select distinct count(*) as Count,
    con.STATE,
    month(con.sub_Date) as Month,
    year(con.sub_Date) as Year
    from contract con

    group by con.STATE,month(con.sub_date),year(con.sub_date)

3 个答案:

答案 0 :(得分:2)

您可以将以下内容添加到查询中,以将预先格式化的月份/年份作为报告数据集的一部分返回 - 可能比尝试在报告级别重建它更容易:

select distinct count(*) as Count,
  con.STATE,
  month(con.sub_Date) as Month,
  year(con.sub_Date) as Year,
  left(datename(mm, sub_Date), 3) + ' ' + cast(year(sub_Date) as char(4)) as MonthYear
from contract con
group by con.STATE,
  month(con.sub_date),
  year(con.sub_date),
  left(datename(mm, sub_Date), 3) + ' ' + cast(year(sub_Date) as char(4))

答案 1 :(得分:2)

我通常更喜欢使用CONVERT来获取部分日期,但我没有看到任何CONVERT日期格式会让你干净利落地使用MON YYYY输出。但是,格式106将为您提供大部分方式。因此,将它与RIGHT()结合起来可以获得您正在寻找的格式的日期。

SELECT  DISTINCT
        COUNT(*) AS Count ,
        [con].[STATE] ,
        MONTH([con].[sub_Date]) AS Month ,
        YEAR([con].[sub_Date]) AS Year ,
        RIGHT(CONVERT(CHAR(11), [con].[sub_Date], 106), 8) AS MonthYear
FROM    [dbo].[contract] AS con
GROUP BY [con].[STATE] ,
        MONTH([con].[sub_Date]) ,
        YEAR([con].[sub_Date]) ,
        RIGHT(CONVERT(CHAR(11), [con].[sub_Date], 106), 8)

答案 2 :(得分:2)

我强烈建议您在报告级别执行日期格式设置。

将查询中的日期作为所需期间的第一个日期返回,但随后设置占位符/文本框的格式字符串。

这样做的原因是,当报表导出到Excel时,排序和数据操作按预期工作。

所以我会使用一个查询:

SELECT DISTINCT
    COUNT(*) AS Count ,
    con.STATE ,
    DATEADD(MONTH, DATEDIFF(MONTH, 0, con.sub_Date), 0) AS FirstOfMonth
FROM
    contract con
GROUP BY
    con.STATE ,
    DATEADD(MONTH, DATEDIFF(MONTH, 0, con.sub_Date), 0)

然后使用报告中的格式代码(例如MMM, YYYY)进行显示,如果需要分组,则使用=Month(fields!FirstOfMonth.Value)分隔日期。这将允许用户在需要时适当地转动数据。

日期的格式是表示逻辑,如果可能的话,应该保留在SQL之外。