我一直试图让这个行为没有运气。
数据库基本字段只有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初始/名称?
我做了大量的研究并尝试了许多差异表达但没有运气..提前感谢。
答案 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"
)
如果有帮助,请告诉我。