He intentado que esto funcione sin suerte.

El campo base de la base de datos solo tiene el campo NOMBRE COMPLETO, que incluye las iniciales del segundo nombre en algunos casos y no las iniciales del segundo nombre en otros casos.

He estado tratando de mostrar Apellido, Nombre usando esta expresión ssrs a continuación: Si bien esto funciona en nombres que no tienen iniciales del segundo nombre o nombre en el campo ... para aquellos nombres que incluyen iniciales / nombre del segundo, ejecutamos en problemas con la visualización.

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

Pero incluye las iniciales del medio para mostrarse primero. Como ejemplo:

Si el campo de nombre completo es John S Doe, la expresión anterior se muestra como:

S Doe, John

Lo que necesito mostrar es:

Doe, John

¿Cómo configuro mi expresión para deshacerme de la inicial / nombre del segundo nombre para mostrar?

He investigado mucho y he probado muchas expresiones diferentes, pero no tuve suerte ... gracias de antemano.

1
user3571153 18 ago. 2016 a las 18:26

2 respuestas

La mejor respuesta

Intente usar esta expresión:

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

Es una solución SSRS nativa, sin embargo, recomiendo usar código personalizado para obtener una solución mantenible.

ACTUALIZACIÓN: solución Regex:

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

Avísame si esto ayuda.

1
alejandro zuleta 18 ago. 2016 a las 21:47

Si bien es un poco ineficiente, esta es una forma limpia de lograr el resultado:

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

Editar: Lo anterior de hecho no funciona con sufijos. La expresión a continuación eliminará una inicial del segundo nombre si es el segundo nombre y tiene una longitud de 1, que puede usar en un campo calculado. Pero fallaría para el primer nombre "Ann Marie" y el primer / último intercambio tendría que manejarse por separado.

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

En resumen, es mejor que le sirva manejar esto en código. Pero aun así, si su campo de nombre completo incluye el espacio más allá de lo que desea separar, surge la posibilidad de casos ambiguos, como el sufijo y sin iniciales "Ann Marie van Der Beek".

2
bitnine 18 ago. 2016 a las 17:06