Decode y Concat

Alejandro_Bungle
27 de Febrero del 2010
Saludos,

tengo que realizar una query, en la cual he de hacer una sentencia decode. El problema es, q lo q necesito sería, de forma resumida y abstraída, lo siguiente:

Si valor = a, concaternar a con ("_", b), ("_", c).
Resultado sería_ a_b_c.
Esto es sencillo, el problema surge en que aunque el valor sea a, a veces no hay b ni c (si hay b, sí hay c). Entonces queda: a__; Ahí está mi problema, cómo puedo quiar los guiones bajos? Hay que tener en cuenta que no puedo controlar cuando hay, o no hay, b y c, por tanto, aunque imagino que he de jugar con el decode, concat, y substr, no soy capaz de hacer que cuaje.

¿Alguien puede ayudarme?

zxsplinter
27 de Febrero del 2010
El decode no te arrojara el resultado correcto, asi que utiliza la funcion ltrim de la siguiente manera:

select rtrim(rtrim(A||'_'||B,'_')||'_'||C,'_')
from tabla

Lo que hace la funcion rtrim es eliminar parte de una cadena de caracteres tomando como referencia una subcadena. ejemplos:

rtrim('tech '); would return 'tech'
rtrim('tech ', ' '); would return 'tech'
rtrim('123000', '0'); would return '123'
rtrim('Tech123123', '123'); would return 'Tech'
rtrim('123Tech123', '123'); would return '123Tech'
rtrim('Techxyxzyyy', 'xyz'); would return 'Tech'
rtrim('Tech6372', '0123456789'); would return 'Tech'


te recomiendo que cuando tengas dudas sobre las funciones disponibles en oracle, entres a esta pagina:

http://techonthenet.com/oracle/functions/index.php

te va a servir muchisimo !!