在 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"
- 用您的日期字段替换
FieldName
将 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"
我的部分查询是这样的:
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"
- 用您的日期字段替换
FieldName
将
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"