Esto se relaciona con mi Pregunta anterior
Lo que ahora quiero hacer es en mi columna de valor, si hay alguna instancia de ++, sustitúyala por 999.
Así que por ejemplo si tengo 1+2++3
esto debería actualizarse a 1+2+999+3
¿Cómo logro esto?
Gracias
Respuestas
0 para la respuesta № 1Configuración de Oracle:
CREATE TABLE your_table ( value ) AS
SELECT NULL FROM DUAL UNION ALL
SELECT "1" FROM DUAL UNION ALL
SELECT "1+2" FROM DUAL UNION ALL
SELECT "1++2" FROM DUAL UNION ALL
SELECT "+1" FROM DUAL UNION ALL
SELECT "1+" FROM DUAL UNION ALL
SELECT "1+2++3" FROM DUAL;
Consulta:
SELECT TRIM( BOTH "+" FROM REPLACE( "+" || value || "+", "++", "+999+" ) )
FROM your_table
Salida:
VALUE
---------
999
1
1+2
1+999+2
999+1
1+999
1+2+999+3
Si puede tener más de un elemento faltante para reemplazar en una fila, entonces necesita una solución más complicada:
Configuración de Oracle:
CREATE TABLE your_table ( value ) AS
SELECT NULL FROM DUAL UNION ALL
SELECT "1" FROM DUAL UNION ALL
SELECT "1+2" FROM DUAL UNION ALL
SELECT "1++2" FROM DUAL UNION ALL
SELECT "+1" FROM DUAL UNION ALL
SELECT "1+" FROM DUAL UNION ALL
SELECT "1+2++3" FROM DUAL UNION ALL
SELECT "1+2+++3" FROM DUAL UNION ALL
SELECT "+" FROM DUAL;
Consulta:
SELECT ( SELECT LISTAGG(
COALESCE(
REGEXP_SUBSTR( t.value, "(.*?)(+|$)", 1, LEVEL, NULL, 1 ),
"999"
),
"+"
) WITHIN GROUP ( ORDER BY LEVEL )
FROM DUAL
CONNECT BY LEVEL <= REGEXP_COUNT( t.value, "+" ) + 1
) AS value
FROM your_table t
Salida:
VALUE
-------------
999
1
1+2
1+999+2
999+1
1+999
1+2+999+3
1+2+999+999+3
999+999