1

在 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)
4

3 回答 3

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))
于 2013-03-12T14:42:06.597 回答
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)
于 2013-03-12T15:13:30.437 回答
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。

于 2013-03-12T16:09:18.433 回答