2013-03-12 47 views
0

在SSRS中使用下面的示例查询会将月份返回为单个数字(1-12)。我想要的是像2000年1月那样显示日期。我将如何更改我的代码以便能够从单个月份格式化为MMM YYYY格式?我试图在Visual Studio本身的格式,但它现在返回作为MMM YYYY。SSRS/TSQL日期格式

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) 

回答

1

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

从查询中返回日期作为期望时间段的第一个日期,然后设置占位符/文本框的格式字符串。

这样做的原因是,当报告导出到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外面。

1

您可以添加以下到查询到预格式化月/年回国作报告数据集的一部分 - 也许更容易比试图在报告级别来重建它:

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)) 
+0

看起来好像可以工作,我会看到它后,我会看到更多。非常感谢! – user2146212 2013-03-12 14:48:27

1

我通常更喜欢使用CONVERT获取部分日期,但我没有看到任何CONVERT日期格式,这会使MONYYYY输出变得干净利落。然而,格式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)