es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para dividir las dimensiones extraídas en tres columnas separadas, puedes utilizar la función SUBSTRING junto con INSTR 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:

    SELECT 
      PART_NO, 
      SUBSTRING(dimensions, 1, INSTR(dimensions, 'x')-1) AS Altura, 
      SUBSTRING(dimensions, INSTR(dimensions, 'x')+1, INSTR(dimensions, 'x', INSTR(dimensions, 'x')+1)-INSTR(dimensions, 'x')-1) AS Ancho,
      SUBSTRING(dimensions, INSTR(dimensions, 'x', INSTR(dimensions, 'x')+1)+1) AS Profundidad
    FROM (
      SELECT 
        PART_NO, 
        REGEXP_SUBSTR(DESCRIPTION, '\d+(\.\d+|)\s?x\s?\d+(\.\d+|)(\s?x\s?\d*(\.?\d+|))?', 1, 1, 'i') AS dimensions
      FROM Products
    ) t
    

    En esta consulta:

    • La consulta interna extrae las dimensiones utilizando la función REGEXP_SUBSTR tal como ya lo has hecho.
    • La consulta externa luego utiliza SUBSTRING e INSTR 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.

Comments are closed.