使用 st、nd、rd、th 格式化日期时间日期
Format datetime day with st, nd, rd, th
我正在 SSRS 中创建一个报告,在顶部我有一个 header 和一个 "Last Refreshed" 的占位符,它将显示报告最后一次 运行.
我在占位符中的功能很简单:
=Format(Now, "dddd dd MMMM yyyy hh:mm tt")
看起来像这样:
Monday 22 September 2015 09:46 AM
我想用英文后缀 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 部分,但我看不到。
转到布局视图。 Select 在 "Code" 选项卡上报告 Properties.Click 并输入此代码
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)
右键单击 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"
我找到了一个简单的方法。请看下面的例子;
= 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"
)
我正在 SSRS 中创建一个报告,在顶部我有一个 header 和一个 "Last Refreshed" 的占位符,它将显示报告最后一次 运行.
我在占位符中的功能很简单:
=Format(Now, "dddd dd MMMM yyyy hh:mm tt")
看起来像这样:
Monday 22 September 2015 09:46 AM
我想用英文后缀 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 部分,但我看不到。
转到布局视图。 Select 在 "Code" 选项卡上报告 Properties.Click 并输入此代码
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)
右键单击 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"
我找到了一个简单的方法。请看下面的例子;
= 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"
)