Dividir una cadena de longitud variable en Oracle 10g.
Estoy teniendo problemas para dividir una cadena de longitud variable delimitada por espacios que contiene nombres en Oracle 10g. A continuación, se muestran algunos ejemplos de lo que quiero decir:
1. Nombre: Alpha Beta
Nombre_Primer: Alpha
Nombre_Apellidos: Beta
2. Nombre: Alpha Beta Gamma
Nombre_Primer: Alpha
Nombre_Medio: Beta
Nombre_Apellidos: Gamma
3. Nombre: Alpha Beta Gamma Omega
Nombre_Primer: Alpha
Nombre_Medio: Beta
Nombre_Apellidos: Gamma Omega
Gracias.
davy.ai
Solución para dividir una cadena de texto de longitud variable delimitada por espacios que contiene nombres en Oracle 10g
Para dividir una cadena de texto de longitud variable delimitada por espacios que contiene nombres en Oracle 10g, se puede utilizar la siguiente consulta SQL:
La consulta anterior utiliza la función
REGEXP_SUBSTR
y expresiones regulares para dividir la cadena de nombres en su primer nombre, nombre intermedio y apellido. La declaraciónCASE
se utiliza para manejar cadenas de nombres con diferentes cantidades de espacios.Para el primer y último nombre, utilizamos
REGEXP_SUBSTR(Nombre, '[^ ]+', 1, n)
para obtener la n-ésima palabra en la cadena de nombres, donden
puede ser 1 o 2.Para el nombre intermedio, utilizamos
REGEXP_REPLACE
con una expresión regular que coincide con las primeras dos palabras y captura el resto de la cadena. Reemplazamos toda la cadena con el grupo capturado, lo cual nos da el nombre intermedio y el apellido.La consulta muestra los primeros, nombres intermedios y apellidos para cada cadena de nombres de entrada. Podemos reemplazar la columna
Nombre
con la columna de nombres de nuestra tabla actual para obtener el resultado deseado.