Formatting Datetime in SSRS Expression
Asked Answered
D

2

1

Part of my query is like so:

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

With the expression at the where clause above, you can pull a rolling 30 days data without having to supply values. Now users of the report want to see it represented like:

    2nd April – 1st May

when the report is ran. Knowing that I have no parameters as the requirement is to not use parameters, how do I reference ">= DATEADD(DAY, - 30, GETDATE())" to reflect the start date and the end date in the report?

Dragnet answered 11/5, 2015 at 9:24 Comment(1)
Possible duplicate of Format datetime day with st, nd, rd, thPedigo
M
4

SSRS doesn't have built-in support for ordinal numbers (i.e. "1st" or "2nd" instead of "1" or "2"). This page contains custom code to add this functionality to your SSRS report; however it is slightly wrong. Here is a corrected version:

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

If you add this code to the code section of your report under report properties, your textbox expression would be:

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)



Munmro answered 11/5, 2015 at 15:15 Comment(0)
P
0

Right Click on the Textbox, Go To Textbox Properties then, Click on Number tab, click on custom format option then click on fx button in black.

Write just one line of code will do your work in simpler way:

A form will open, copy the below text and paste there to need to change following text with your database date field.

Fields!FieldName.Value, "Dataset"

  1. Replace FieldName with your Date Field
  2. Replace Dataset with your Dateset Name

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

Pedigo answered 29/9, 2017 at 11:3 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.