Elimine todos los puntos de una cadena excepto el primero, con Oracle REGEXP_REPLACE

Quiero usar Oracle REGEXP_REPLACE para eliminar algunos puntos de una cadena. Tengo que eliminar del segundo punto si existe. Por ejemplo:

4       => 4
5       => 5
5.1     => 5.1
5.1.1   => 5.11
5.1.2   => 5.12
5.1.2.1 => 5.121
5.1.2.2 => 5.122
6       => 6

Tengo esta

select REGEXP_REPLACE(num, '(\d+)(\.)(\d+)(\.)(\d+)', '\1.\3\5')
from my_table;

el problema es que mi consulta se hace solo por dos puntos. Si la cadena tiene más de dos puntos, tengo que modificar la consulta para aceptar más puntos y así. ¿Hay alguna manera de hacer esto automáticamente?

Muchas Gracias

preguntado el 12 de junio de 12 a las 18:06

2 Respuestas

Una posible solución "sucia"

select REGEXP_REPLACE(num, '(\d+)(\.)(.*)', '\1\2') || 
       REPLACE( REGEXP_REPLACE(num, '(\d+)(.*)', '\2') ,'.','') 
from my_table;

y aunque no está nada claro, funciona.

Respondido el 12 de junio de 12 a las 19:06

SELECT SUBSTR(mystr, 1, INSTR(mystr,'.'))
       || REPLACE(SUBSTR(mystr, INSTR(mystr,'.')+1),'.')
FROM my_table;

Respondido el 13 de junio de 12 a las 08:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.