【问题标题】:Formatting YYYYMM to MMMYYYY in SSRS在 SSRS 中将 YYYYMM 格式化为 MMMYYYY
【发布时间】:2017-01-23 21:14:10
【问题描述】:

我想将我的一个数据字段格式化为 MMM YYYY 的日期格式。例如,如果返回“201209”,那么我希望它显示为 2012 年 9 月。在 SQL 端,我使用 CAST 仅查看年份和月份,通常该字段看起来像“20120914” .这是我在程序中使用的:

cast(left(cast(TransactionDateKey as varchar(100)), 6) as int)

在 SSRS 中,我使用以下代码:

=Format(DateValue(MonthName(Right(Fields!Month.Value, 2))
 + "," + 
 Left(Fields!Month.Value,4)), "Y")

但是输出是“2012 年 9 月”,我将如何获取缩写“Sep”,而不是完整的月份名称?

【问题讨论】:

  • 如果可能的话,您应该更改您的数据库,使其成为日期时间数据类型,而不是听起来像您拥有的 int 或 varchar。这并不总是可能的,因此您真正应该做的是将日期(或日期时间)数据类型传递给您的报告。然后根据日期数据类型进行格式化。
  • @Sean Lange -- 非常正确;请记住,在许多组织中,更改数据库可能是一项极其艰巨的任务!
  • @JosephDoggie 因此这部分。 “这并不总是可能的”。 :)

标签: sql-server reporting-services sql-server-2012 formatting ssrs-2014


【解决方案1】:

另一个选项是 SQL Server 中的 Format()

Select Format(CONVERT (date,convert(char(8),TransactionDateKey )),'MMM yyyy')

例如

Select Format(CONVERT (date,convert(char(8),20120914 )),'MMM yyyy')
-- Returns Sep 2012

我应该注意到 Format() 并不以其性能而闻名,但确实提供了一些不错的功能

【讨论】:

  • 感谢您回复我,但是当我摆脱我的演员表并用您的建议替换它时,返回 MMM yyyy 而不是一个值
  • @Istaley 两个问题。 1) TransactionDateKey 是日期还是日期时间字段? 2)您是否在 SQL Server(不是 SSRS)中运行 Format()
  • 1) 我们的事实表中的 TransactionDateKey 是一个 int。我把它抛在上面是为了切断这一天,只是为了离开 YYYYMM。我正在制作一个矩阵报告,我们想知道一个人每个月的填充量,而不是每天。也许有比做演员更好的方法,但我不确定。 2) 是的,我试过 Format() 是 SQL Server
  • @Istaley 然后您只需将 int (yyyymmdd) 转换为日期。所以试试 Select Format(cast(TransactionDateKey as date),'MMM yyyy')
  • 我在 SSMS 中收到以下错误“不允许从数据类型 int 到日期的显式转换”
【解决方案2】:

如果您在数据集中返回一个实际的 datetime 字段 - 这就是您的 TransactionDateKey 看起来的样子 - 您可以使用 format 在 SSRS 表达式中完全处理格式:

=format(Fields!TransactionDateKey.Value,"MMM yyyy")

如果您返回 yyyyMM 用于分组目的,则没有什么能阻止您在 SQL 中为 TransactionDateKey 每月第一天的 datetime 值分组:

select dateadd(m,datediff(m,0,TransactionDateKey),0) as FirstDayOfTheMonth

如果您绝对需要yyyyMM 格式返回varchar,您可以将其转换为MMM yyyy,但您首先需要将其转换在你的表达式中添加一个date - 斜线和所有 - 在 SSRS 开始之前:

=format(cdate(left(Fields!Month.Value,4) & "/" & right(Fields!Month.Value,2) & "/01"), "MMM yyyy")

【讨论】:

    【解决方案3】:

    在 SSRS 中你可以使用:

    =StrConv(LEFT(
    MONTHNAME(REPLACE(RIGHT(Fields!Month.Value,2),"0","")),3
    ),vbProperCase,NOTHING) & " " & LEFT(Fields!Month.Value,4)
    

    对于201209,返回Sep 2012

    如果这有帮助,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-10
      • 1970-01-01
      • 2014-05-31
      相关资源
      最近更新 更多