【问题标题】:SSRS/TSQL date formattingSSRS/TSQL 日期格式
【发布时间】:2013-02-28 02:52:21
【问题描述】:

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

【问题讨论】:

    标签: tsql ssrs-2008 reporting reporting-services


    【解决方案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。

    【讨论】:

      【解决方案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))
      

      【讨论】:

      • 看起来它可能会起作用,等我再弄乱它之后再看看。非常感谢!
      【解决方案3】:

      我通常更喜欢使用 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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多