Oracle no tiene ninguna función propia (hasta ahora conocida) que permita saber sin un valor en un columna tipo VARCHAR es un número.
Opcion 1
Buscando en la red encontré una muy buena opción que me ha funcionado hasta ahora. Se realiza con la función TRANSLATE, cuya documentación oficial la podemos encontrar aquí http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions196.htmEsta consulta nos devuele todos los registros que sean númericos en una determinada columna. Originalmente fue publicada en este enlace: http://stoneheads.wordpress.com/2010/07/16/trucos-oracle-comprobar-si-un-campo-es-numerico/
SELECT * FROM TABLE WHERE TRANSLATE(COLUMNA, 'T 0123456789', 'T') IS NULL AND COLUMNA IS NOT NULL;
Haciendole unas pequeñas mejoras de mi parte, utilizando la sentencia CASE, podemos obtener un listado con una nueva columna para mostrar si el valor es Numerico, Texto o Nulo, :
Otra forma de hacerlo, es aprovechando el poder de la expresiones regulares,con la función REGEXP_LIKE (Documentación en http://docs.oracle.com/cd/B14117_01/server.101/b10759/conditions018.htm). REGEXP_LIKE nos devuelve verdadero, en todos los valores que hagan match con una expresión regular ingresada por parámetro.
Esta sencilla consulta nos devolverá todos los valores que sean totalmente numéricos en una determinada columna, descartando también los valores nulos.
SELECT COLUMNA, CASE WHEN TRANSLATE(COLUMNA, 'T 0123456789', 'T') IS NULL AND COLUMNA IS NOT NULL THEN 'ES NUMERO' WHEN TRANSLATE(COLUMNA, 'T 0123456789', 'T') IS NOT NULL THEN 'ES TEXTO' ELSE 'ES NULO' END AS TIPO FROM TABLA;
Opcion 2
Otra forma de hacerlo, es aprovechando el poder de la expresiones regulares,con la función REGEXP_LIKE (Documentación en http://docs.oracle.com/cd/B14117_01/server.101/b10759/conditions018.htm). REGEXP_LIKE nos devuelve verdadero, en todos los valores que hagan match con una expresión regular ingresada por parámetro.
Esta sencilla consulta nos devolverá todos los valores que sean totalmente numéricos en una determinada columna, descartando también los valores nulos.
SELECT COLUMNA
FROM TABLA
WHERE REGEXP_LIKE (COLUMNA, '^[[:digit:]]+$');
Bueno como ven, en Integración de Datos, hay muchos caminos para llegar al mismo resultado, por lo que en una próxima entrada veremos como hacer operaciones similares utilizando los steps de PDI.
¡Dios los bendiga y que pasen un muy buen día!
Me ayudo mucho. Gracias
ResponderEliminarGracias por la información, excelente.
ResponderEliminar