首页 > 解决方案 > 在 SSRS 中设置自定义格式表达式时,月份和日期名称出现乱码

问题描述

我的数据集有一个Datetime名为FilmReleaseDate. 如果我设置文本框属性以使用其中一种股票日期格式设置日期格式,则它可以正常工作。但是如果我选择自定义并输入一个表达式,我会得到垃圾。

例如,日期的实际值将是12/15/2005,如果我只想显示月份以便输出为“December”,我使用以下表达式作为自定义格式:=MonthName(Month(Fields!FilmReleaseDate.Value))

报告上显示的是Dece0ber.

我也尝试过使用可选的布尔参数: =MonthName(Month(Fields!FilmReleaseDate.Value), false)

但结果是一样的。

同样,在尝试仅显示星期几时。

相同的值12/15/2005

表达方式:=WeekdayName(Weekday(Fields!FilmReleaseDate.Value,0),false,0)

但输出的是:T12ur015a5

不知道发生了什么。

编辑 -

使用相同的表达式创建计算字段,一切都正确显示。只有在自定义格式窗口中使用表达式时才会出现这种情况。

标签: reporting-services

解决方案


该自定义格式框中可以包含特定的格式/规则,类似于 Excel 等。当您将表达式放在那里时,它会将表达式评估为December,然后转换December为格式模板,并将该模板应用于 2005 年 12 月 15 日。所有这些最终共同产生了Dece0ber.

有几个选项可以得到你想要的:

  1. 只需将该表达式作为文本框的值(从您的编辑看来,您通过使用计算字段获得了类似的结果)。
  2. 使用正确的自定义格式,从而返回月份名称。在这种情况下,您将在自定义格式框中输入的是MMMM(区分大小写)。我相信此链接简要介绍了自定义格式的可能性。专门用于月份名称的部分在这里

使用第一个链接,我们可以弄清楚我们Dece0ber最初是如何得到的。字符 D、e、c、b 或 r 没有日期/时间格式,因此它们完全按原样显示。“m”有一种格式,即日期时间的分钟。我假设您的FilmReleaseDate字段只是一个日期,所以分钟为 0。因此Dece0ber

同样对于工作日,2005 年 12 月 15 日似乎是星期四。所以自定义格式字符串是“星期四”。字符 T、u、r 和 a 没有日期/时间格式。“h”是小时(1-12),如果FilmReleaseDate只是一个日期,那么时间是午夜,所以小时是 12。“s”是秒,对于日期来说,秒也是 0。“d”是天,所以我们在那里看到 15。而“y”是一位或两位数的年份,没有前导零,所以 2005 的末尾有 5。把它们放在一起,我们得到T12ur015a5


推荐阅读