SQL Server - Dividir luego de encontrar dos espacios en blanco

 
Vista:
sin imagen de perfil
Val: 48
Ha disminuido su posición en 2 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

Dividir luego de encontrar dos espacios en blanco

Publicado por JJ (26 intervenciones) el 08/10/2021 22:09:51
Buenas tardes, tengo una tabla con una columna que tiene una columna con NOMBREFULL, lo que ocupo orientacion es como actualizar los campos apellido1, apellido2, nombre... el orden de la columna full name siempre va ser primer apellido, segundo apellido y nombre.

He intentado con substring pero solo logro el primerapellido y en la columa apellido2 agrega todo lo que hay despues de primer espacio en blanco.

el Codigo prueba es el siguiente:

select NOMBREFULL, left(NOMBREFULL, CHARINDEX(' ', NOMBREFULL)) as APELLIDO1,
substring(NOMBREFULL, CHARINDEX(' ', NOMBREFULL)+1, len(NOMBREFULL)-(CHARINDEX(' ',NOMBREFULL)-1)) as APELLIDO2
from [EPSSPB].[dbo].[NOMBRE]

pero me devuelve esto:




Captura1


y lo que ocupo es que quede separado el segundo apellido del nombre.

la version de sql es:

Microsoft SQL Server 2017 (RTM-CU19) (KB4535007) - 14.0.3281.6 (X64)
Jan 23 2020 21:00:04
Copyright (C) 2017 Microsoft Corporation
Standard Edition (64-bit) on Windows Server 2016 Standard 10.0 <X64> (Build 14393: ) (Hypervisor)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Dividir luego de encontrar dos espacios en blanco

Publicado por Isaias (4558 intervenciones) el 08/10/2021 22:34:31
Esto lo he visto mas de una vez y es CASI IMPOSIBLE que T-SQL separe los nombres de personas, sobre todos aquellos que estan conformados por mas de un nombre y mas de un apellido

MARIA DE LOS ANGELES RUIZ DE SANTA MARIA

Si el nombre esta conformado de 3 conjuntos, no haya problema

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
If Object_ID('MiTabla','U') Is Not Null Drop Table MiTabla;
Create Table MiTabla(ID Int Identity Primary Key,
					nCompuesto Varchar(50));
Go
 
Insert Into MiTabla Select 'SILVA$LOPEZ$MIGUEL';
Insert Into MiTabla Select 'HERNANDEZ$ANTONIO$FRANCISCO';
Insert Into MiTabla Select 'LUGARDO$VICENTE$FLORIBERTO';
Insert Into MiTabla Select 'LOPEZ$GUZMAN$HUGO LEONARDO';
Insert Into MiTabla Select 'SALAS$PEREZ$ARACELI';
Insert Into MiTabla Select 'VARELA$LEON$ALBERTO';
Insert Into MiTabla Select 'VARELA$GARCIA$MATEO CELESTINO';
Insert Into MiTabla Select 'SALINAS$HERNANDEZ$VERONICA';
Insert Into MiTabla Select 'VARELA$LEON$IVAN';
Insert Into MiTabla Select 'RAMIREZ$TINOCO$MA DE LA LUZ';
Insert Into MiTabla Select 'UGALDE$FERRER$NANCY';
Insert Into MiTabla Select 'RAMOS$MENCHACA$MARISELA';
Insert Into MiTabla Select 'GONZALEZ$SIBAJA$ELOISA';
Insert Into MiTabla Select 'IDA$NAKAMURA$REYNA VERONICA';
Insert Into MiTabla Select 'AYALA$GONZALEZ$MARGARITA';
Insert Into MiTabla Select 'GIL$GUZMAN$AUSTREBERTHA';
Insert Into MiTabla Select 'CRUZ$GRANADA$GRACIELA';
Insert Into MiTabla Select 'ESCUDERO$NOLASCO$MAURICIO';
 
With T1 As
(Select	*,
		CharIndex('$',nCompuesto) Primer$,
		CharIndex('$',nCompuesto,CharIndex('$',nCompuesto)+1) Segundo$,
		Len(nCompuesto) Caracteres
From	MiTabla)
Select	*,
		Left(nCompuesto,Primer$-1) aPaterno,
		SubString(nCompuesto,Primer$+1,Segundo$-Primer$-1) aMaterno,
		SubString(nCompuesto,Segundo$+1,Caracteres-Segundo$)
From	T1;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 48
Ha disminuido su posición en 2 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

Dividir luego de encontrar dos espacios en blanco

Publicado por JJ (26 intervenciones) el 08/10/2021 22:56:05
excelente aporte! justo eso!! 100%
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Dividir luego de encontrar dos espacios en blanco

Publicado por Isaias (4558 intervenciones) el 08/10/2021 23:52:07
Checa esta liga:

https://social.msdn.microsoft.com/Forums/es-ES/d589fa39-1244-47f8-a17f-3a9cb127d68a/campo-nombre-unificado-separar-en-4-campos-apellido1-apellido2-nombre1-nombre2?forum=sqlserveres
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar