【问题标题】:Format datetime day with st, nd, rd, th使用 st、nd、rd、th 格式化 datetime 日期
【发布时间】:2015-09-22 08:53:42
【问题描述】:

我正在 SSRS 中创建一个报告,在顶部我有一个带有“上次刷新”占位符的标题,它将显示报告上次运行的时间。

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

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

看起来像这样:

2015 年 9 月 22 日星期一上午 9: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 代码插入报告中可以解决我的问题的信息,但我一定要发疯了,因为我看不到在哪里添加它。指南说要进入 Properties > Code 部分,但我看不到。

【问题讨论】:

    标签: datetime reporting-services format ssrs-2008


    【解决方案1】:

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

    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)
    

    【讨论】:

    • 您的回答看起来确实可以解决问题,但我觉得我在这里完全是个白痴,因为我一生都找不到添加代码的地方。我想知道是否由于我对 SQL 报告的无知,我在某个地方使用了错误的术语,这让我们俩都感到困惑。我打开“SQL Server 商业智能开发工作室”并创建了一个新项目,添加了一个 RDL 文件的报告,现在我处于设计视图中。如果我转到报告的属性,它只有它的路径,项目的属性没有代码选项卡,并且代码视图看起来像 HTML。
    • “报告”位于主设计窗口上方的工具栏中。这有时会消失,所以如果您看不到它,请在您的设计上单击几次!我们都必须在某个时候学习!
    • 好吧,我还是觉得自己很蠢,但至少现在可以了。谢谢米格尔,你是个天才;-)
    【解决方案2】:

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

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

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

    Fields!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"
      

    【讨论】:

    • 要提出改进建议,您错过了 11 日和 19 日之间的值的情况
    【解决方案3】:

    我找到了一个简单的方法。请看下面的例子;

    = 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"
        )
    

    【讨论】:

      猜你喜欢
      • 2015-10-11
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      • 2014-02-25
      • 2016-10-19
      • 1970-01-01
      • 1970-01-01
      • 2017-01-07
      相关资源
      最近更新 更多