SQL Server - Ordenar palabras de un campo!

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

Ordenar palabras de un campo!

Publicado por SEBASTIAN (4 intervenciones) el 10/09/2019 21:54:58
Buen dia,

tengo el siguiente problema que no he podido encontrar en la web.


tengo un registro el cual posee como nombre: CARLOS ALBERTO JIMENEZ BOHORQUEZ

y necesito pasar el registro en orden alfabetico asi: ALBERTO BOHORQUEZ CARLOS JIMENEZ.
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

Ordenar palabras de un campo!

Publicado por Isaias (4558 intervenciones) el 10/09/2019 22:21:28
SEBASTIAN

Lo que pides es meramente IMPOSIBLE, ya que es TU PROPIA DEDUCCION, no exite logica alguna, ¿o si?
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 lisandro
Val: 51
Ha aumentado 1 puesto en SQL Server (en relación al último mes)
Gráfica de SQL Server

Ordenar palabras de un campo!

Publicado por lisandro (20 intervenciones) el 12/09/2019 05:16:10
Bueno,. una logica pudiera ser la siguiente
buscas la cantidas de vecez que tiene espacio ese nombre - en este caso 3
asignas un arreglo digamos e1, e2, e3
determinas la longitud de la cadena - tam = len(nombre)
buscas la pocicion de cada espacio - p1=6, p2=13,...
sacas la subcadena donde empieza cada uno de los nombres s1='C', s2='A', S3='J' y s4='B'
determinas la subcadena de nombre que le corrsponde a cada uno
c1= CARLOS c2=ALBERTO c3=JIMENEZ c4=BOHORQUEZ
ordenas las s s2, s4, s1, s3
ahora escribes ;as subcadenas
c2 c4 c1 c3
yo te sugiero que lo hagas en un procedimiento con un valor de entrada (@nombre) y uno de salida @nombreordenado
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 86
Ha disminuido su posición en 2 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

Ordenar palabras de un campo!

Publicado por Rafael (110 intervenciones) el 12/09/2019 16:29:22
Hola

Siguiendo la idea de ordenar cada palabra (es decir usar los espacios como separador)... y siendo SQL SERVER 2017
Deberia funcionar algo tal que asi:

1
2
3
4
5
SELECT STRING_AGG(VALUE, ' ')
       WITHIN GROUP (ORDER BY VALUE) AS NUEVO_NOMBRE
FROM   (SELECT VALUE
        FROM   STRING_SPLIT('CARLOS ALBERTO JIMENEZ BOHORQUEZ',' ')
        ) PASO

Aqui la muestra de que si funciona
http://www.sqlfiddle.com/#!18/9eecb/57356


Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
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

Ordenar palabras de un campo!

Publicado por Isaias (4558 intervenciones) el 12/09/2019 16:53:27
Y si por casualidad, el que capturo el nombre lo hiciera:

DE LA LUZ GONZALEZ MANRIQUEZ MARIA TERESA

Creo que esto ya lo he visto infinidad de veces
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 Lisandro
Val: 51
Ha aumentado 1 puesto en SQL Server (en relación al último mes)
Gráfica de SQL Server

Ordenar palabras de un campo!

Publicado por Lisandro (20 intervenciones) el 13/09/2019 03:14:16
Maestro en este caso si que no hay forma de saber que de la luz es un apellido,
No queda de otra.
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: 9
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Ordenar palabras de un campo!

Publicado por SEBASTIAN (4 intervenciones) el 12/09/2019 19:48:35
Funciona correctamente, ahora me podrías decir si esta misma acción la podría realizar con los datos de una tabla? por ejemplo los datos de la columna "Nombre" de la tabla "Clientes" y poder hacerlo con todos los clientes que se encuentren en esa tabla si se puede por medio de un procedimiento almacenado.

Gracias.
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 Lisandro
Val: 51
Ha aumentado 1 puesto en SQL Server (en relación al último mes)
Gráfica de SQL Server

Ordenar palabras de un campo!

Publicado por Lisandro (20 intervenciones) el 13/09/2019 03:03:25
Sebastian claro que lo puedes hacer con todos los nombres de la tabla cliente, lo que tendrias que hacer un ciclo que recorra la tabla llamando el preocedimiento donde por 'CARLOS ALBERTO JIMENEZ BOHORQUEZ' pasarias el nombre que tienes en la tabla clientes y debe devolverte el nombre ordenado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
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

Ordenar palabras de un campo!

Publicado por Isaias (4558 intervenciones) el 13/09/2019 21:04:44
Creo que el mejor consejo y si a SEBASTIAN le funciona lo que recomiendas, seria hacer una FUNCION de usuario y listo
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: 9
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Ordenar palabras de un campo!

Publicado por SEBASTIAN (4 intervenciones) el 13/09/2019 21:37:52
Uniendo los conceptos de ordenar mas el bucle, logre hacer lo que deseaba y el código lo comparto para dejarlo en el foro.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
DECLARE @count INT = (SELECT count(*) FROM CLIENTES)
DECLARE @n INT=0
WHILE (@n < @count)
BEGIN
 
SET @n=@n+1
 
DECLARE @tags NVARCHAR(400)
SET @tags = (SELECT NOMBRES FROM CLIENTES WHERE ID=@n)
 
 
SELECT STRING_AGG(VALUE, ' ')
       WITHIN GROUP (ORDER BY VALUE) AS NUEVO_NOMBRE
FROM   (SELECT VALUE
        FROM   STRING_SPLIT(@tags,' ')
        ) PASO
END



El anterior código dentro de un procedimiento almacenado y luego use el siguiente código para guardar los resultados (los nombres ordenados).


1
2
3
CREATE TABLE NOMBRES_ORDENADOS (NOMBRE NVARCHAR (400))
INSERT NOMBRES_ORDENADOS
EXEC ORDENAR

Todo funciono como esperaba, talvez al ser un principiante en base de datos, pueda haber una manera mas agradable y renderizada para hacerlo pero afirmo que la funcionalidad para mi quedo perfecta.

Gracias.
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

Ordenar palabras de un campo!

Publicado por Isaias (4558 intervenciones) el 13/09/2019 22:44:46
¿Y le separa los nombres de forma correcta?

Digo, yo lo probe con "DE LA LUZ GONZALEZ MANRIQUEZ MARIA TERESA" y nada mas no dio lo que esperaba

Saludos
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: 9
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Ordenar palabras de un campo!

Publicado por SEBASTIAN (4 intervenciones) el 13/09/2019 22:51:21
La respuesta de ese nombre es "DE GONZALEZ LA LUZ MANRIQUEZ MARIA TERESA" lo cual para lo que yo busco esta correcta ya que no busco que el nombre tenga sentido como tal, solo que ordene las palabras de acuerdo al alfabeto.
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