SSRS报告表达式以拆分全名字段

时间:2016-08-18 15:26:57

标签: reporting-services ssrs-2008-r2 ssrs-expression

我一直试图让这个行为没有运气。

数据库基本字段只有FULL NAME字段,其中包括某些情况下的中间首字母,而在其他一些情况下没有中间首字母。

我一直在尝试使用下面的ssrs表达式显示LastName,FirstName:虽然这适用于在字段上没有中间名首字母或名称的名称....对于那些包含中间名首字母/名称的名称,我们遇到了显示问题。

=Right(Fields!agent_name.Value,Len(Fields!agent_name.Value)-Instr(Fields!agent_name.Value," ")) & ", " & (Left(Fields!agent_name.Value,Instr(Fields!agent_name.Value," ")))

但它包括首先显示的中间首字母..作为一个例子:

如果fullname字段是John S Doe,则上面的表达式显示为:

S Doe, John

我需要显示的是:

Doe, John

如何设置表达式以摆脱要显示的Middle初始/名称?

我做了大量的研究并尝试了许多差异表达但没有运气..提前感谢。

2 个答案:

答案 0 :(得分:2)

虽然效率稍低,但这是一种完成结果的简洁方法:

=Split(Fields!agent_name.Value," ")(Split(Fields!agent_name.Value," ").Length-1) + ", " + Split(Fields!agent_name.Value," ")(0)

编辑:以上内容确实不适用于后缀。如果它的第二个名称长度为1,则下面的表达式将删除一个中间的初始值,您可以在计算字段中使用它。但是第一个名字" Ann Marie"并且需要单独处理第一个/最后一个交换。

=IIF(Split(Fields!agent_name.Value," ")(1).Length=1,Replace(Fields!agent_name.Value, " " + Split(Fields!agent_name.Value," ")(1) + " "," "),Fields!agent_name.Value)

缺点是你最好在代码中处理这个问题。但即便如此,如果你的全名字段在空间上具有超出你想要分离的范围,那么就会出现模糊情况的可能性,比如后缀和初始更少" Ann Marie van Der Beek"。

答案 1 :(得分:1)

尝试使用此表达式:

=RIGHT(
Fields!agent_name.Value,LEN(Fields!agent_name.Value)-InStrRev(Fields!agent_name.Value," "))
 & ", " & LEFT(
 Fields!agent_name.Value,
 InStr(Fields!agent_name.Value," ")-1
)

这是一个原生的SSRS解决方案,但我建议使用自定义代码来获得可维护的解决方案。

更新:正则表达式解决方案:

=System.Text.RegularExpressions.Regex.Replace(
  Fields!agent_name.Value,
  "(\w+)\s+(\w+\.*\s)?(\w+)",
  "$3, $1"
 )

如果有帮助,请告诉我。