使用st,nd,rd,th格式化日期时间

时间:2015-09-22 08:53:43

标签: datetime reporting-services format ssrs-2008

我在SSRS中创建了一个报告,并且在顶部我有一个带有占位符的标题,用于" Last Refreshed"这将显示报告上次运行的时间。

我在占位符中的功能就是这样:

=Format(Now, "dddd dd MMMM yyyy hh:mm tt")

看起来像这样:

  

2015年9月22日星期一09:46

我想用英文后缀st,nd,rd和th格式化日期值。

我无法为此找到内置函数,到目前为止我看过的指南似乎描述了在SQL端使用我不想要的存储过程来执行它。 我正在寻找报告方解决方案

我以为我可以通过一个丑陋的嵌套IIF来完成它,但它出错但尽管没有给我任何语法错误(空白只是为了可读性)。

=Format(Now, "dddd " + 

IIF(DAY(Now) = "1", "1st", 
IIF(DAY(Now) = "21","21st",
IIF(DAY(Now) = "31","31st",
IIF(DAY(Now) = "2","2nd",
IIF(DAY(Now) = "22","22nd",
IIF(DAY(Now) = "3","3rd",
IIF(DAY(Now) = "23","23rd",
DAY(Now) + "th"))))))) 

+ " MMMM yyyy hh:mm tt")

在其他任何语言中,我都会在很久以前使用它,但SSRS对我来说是新手,因此我不确定如何进行简单的字符串操作。令人沮丧!

感谢您提供的任何帮助或指示。

编辑:我已经阅读过将VB代码插入到报告中以解决我的问题,但我必须坚持下去,因为我无法查看将其添加到何处。指南说要进入属性>代码部分,但我看不到。

3 个答案:

答案 0 :(得分:2)

转到布局视图。选择报告属性。单击“代码”选项卡并输入此代码

Public Function ConvertDate(ByVal mydate As DateTime) as string
  Dim myday as integer
  Dim strsuff As String
  Dim mynewdate As String
  'Default to th
  strsuff = "th" 
  myday = DatePart("d", mydate)
  If myday = 1 Or myday = 21 Or myday = 31 Then strsuff = "st"
  If myday = 2 Or myday = 22 Then strsuff = "nd"
  If myday = 3 Or myday = 23 Then strsuff = "rd"
  mynewdate = CStr(DatePart("d", mydate)) + strsuff + " " +      CStr(MonthName(DatePart("m", mydate))) + " " + CStr(DatePart("yyyy", mydate))
 return mynewdate
End function

在必填字段中添加以下表达式。我使用过参数,但您可能正在引用数据字段?

=code.ConvertDate(Parameters!Date.Value)

答案 1 :(得分:1)

右键点击Textbox,转到Textbox Properties然后点击Number tab,点击custom format选项,然后点击黑色的fx按钮。

只需编写一行代码即可以更简单的方式完成工作:

将打开一个表单,复制下面的文本并粘贴到那里,以便在数据库日期字段中更改以下文本。

  

字段!FieldName.Value,"数据集"

  1. FieldName替换为您的日期字段
  2. Dataset替换为您的日期名称

    ="d" + switch(int(Day((Fields!FieldName.Value, "Dataset"))) mod 
    10=1,"'st'",int(Day((Fields!FieldName.Value, "Dataset"))) mod 10 = 
    2,"'nd'",int(Day((Fields!FieldName.Value, "Dataset"))) mod 10 = 
    3,"'rd'",true,"'th'") + " MMMM, yyyy"
    

答案 2 :(得分:0)

我找到了一种简单的方法。请参见下面的示例;

= DAY(Globals!ExecutionTime) & 
    SWITCH(
    DAY(Globals!ExecutionTime)= 1 OR DAY(Globals!ExecutionTime) = 21 OR DAY(Globals!ExecutionTime)=31, "st",
    DAY(Globals!ExecutionTime)= 2 OR DAY(Globals!ExecutionTime) = 22 , "nd",
    DAY(Globals!ExecutionTime)= 3 OR DAY(Globals!ExecutionTime) = 23 , "rd",
    true, "th"
    )