Extrayendo dimensiones con REGEX
Tengo una tabla de partes de almacén, y una columna tiene la descripción de cada parte. Dentro de la descripción están las dimensiones del producto, siempre en el formato: AltoxAnchoxProfundidad.
La descripción puede tener cualquier cantidad de caracteres, por lo que las dimensiones no siempre están en la misma posición de la cadena.
Este es un ejemplo de cómo se ve la tabla:
Parte No | Descripción |
---|---|
ABCDEFGH | Gabinete 245 2070x1014x570 |
AFFDETGL | Estantes 20104 870x300x330 |
En mi consulta, me gustaría seleccionar cada una de las dimensiones, de modo que la tabla se vea así:
Parte No | Alto | Ancho | Profundidad |
---|---|---|---|
ABCDEFGH | 2070 | 1014 | 570 |
AFFDETGL | 870 | 300 | 330 |
He logrado utilizar REGEX para extraer las dimensiones completas de la columna con la siguiente consulta:
SELECT
PART_NO,
REGEXP_SUBSTR(DESCRIPTION, ‘\d+(.\d+|)\s?x\s?\d+(.\d+|)(\s?x\s?\d*(.?\d+|))?’)
FROM Products
Pero no estoy seguro de cómo separar esto en 3 columnas diferentes sin usar algo como INSTR.
¿Alguien puede decirme cuál sería el mejor método para esto?
davy.ai
Para dividir las dimensiones extraídas en tres columnas separadas, puedes utilizar la función
SUBSTRING
junto conINSTR
para encontrar las posiciones de los caracteres “x” dentro de la cadena extraída.Aquí tienes un ejemplo de consulta que muestra cómo hacerlo:
En esta consulta:
REGEXP_SUBSTR
tal como ya lo has hecho.SUBSTRING
eINSTR
para dividir las dimensiones en tres columnas separadas (Altura, Ancho y Profundidad).Ten en cuenta que esta consulta asume que siempre hay tres dimensiones (Altura, Ancho y Profundidad) en la cadena de entrada, separadas por caracteres “x”. Si este no es el caso, es posible que debas modificar la consulta en consecuencia.