在 SSRS 表达式中格式化日期时间

Formatting Datetime in SSRS Expression

我的部分查询是这样的:

    SELECT * FROM TableA
    WHERE ColumnA  >= DATEADD(DAY, - 30, GETDATE())

使用上面 where 子句中的表达式,您可以提取 30 天的滚动数据而无需提供值。现在报告的用户希望看到它表示为:

    2nd April – 1st May

当报告为 运行 时。知道我没有参数,因为要求是不使用参数,我如何引用“>= DATEADD(DAY, - 30, GETDATE())”来反映报告中的开始日期和结束日期?

SSRS 没有对序数的内置支持(即“1st”或“2nd”而不是“1”或“2”)。 This page 包含将此功能添加到您的 SSRS 报告的自定义代码;然而,这是有点错误的。这是更正后的版本:

Public Function FormatOrdinal(ByVal day As Integer) as String
        ' Starts a select case based on the odd/even of num
        if(day = 11 or day = 12 or day = 13)

        ' If the nymber is 11,12 or 13 .. we want to add a "th" NOT a "st", "nd" or "rd"
            return day.ToString() + "th"


        else
    ' Start a new select case for the rest of the numbers
    Select Case day Mod 10
        Case 1
            ' The number is either 1 or 21 .. add a "st"
            Return day.ToString() + "st"
        Case 2
            ' The number is either a 2 or 22 .. add a "nd"
            Return day.ToString() + "nd"
        Case 3
            ' The number is either a 3 or 33 .. add a "rd"
            Return day.ToString() + "rd"
        Case Else
             ' Otherwise for everything else add a "Th"
            Return day.ToString() + "th"
    End Select
        end if
End Function

如果您将此代码添加到报告属性下报告的代码部分,您的文本框表达式将为:

Code.FormatOrdinal(Day(Globals!ExecutionTime)) & " " & MonthName(Month(Globals!ExecutionTime), False) & " - " &  Code.FormatOrdinal(Day(DateAdd("d", -30,Globals!ExecutionTime))) & " " & MonthName(Month(DateAdd("d", -30,Globals!ExecutionTime)), False)

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

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

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

Fields!FieldName.Value, "Dataset"

  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"