viernes, 24 de junio de 2011

Cómo determinar si solo son números?

Este post está destinado a compartir con uds. 2 formas para determinar si una cadena está formada solo por números.

1) La primera de estas 2 formas es a través de la siguiente función:

CREATE OR REPLACE FUNCTION es_numero(v_valor IN VARCHAR2) RETURN NUMBER IS
v_numero NUMBER;
BEGIN
v_numero := TO_NUMBER(v_valor);
RETURN 0;
EXCEPTION WHEN VALUE_ERROR THEN
RETURN 1;
END;

El comportamiento de la función es devolver un 0 si la cadena que le pasamos esta compuesta solo por numero y un 1 si no lo está.

Lógicamente deberán usar la función en un WHERE con la condición = 0 o = 1.


2) La segunda forma que quiero compartir con uds. es a través de expresiones regulares.
Para esto la expresión regular que utilizamos es REGEXP_LIKE junto
con '^[0-9]+$', esto indica que evaluará en la cadena que le pasemos si está compuesta únicamente por números del 0 al 9 incluyendolos.
REGEXP_LIKE nos devuelve 'true' or 'false'.

Ejemplos:

SELECT *
FROM dual
WHERE REGEXP_LIKE ('788asd975', '^[0-9]+$');

Devolverá FALSE

SELECT *
FROM dual
WHERE REGEXP_LIKE ('asdasd', '^[0-9]+$');

Devolverá FALSE

SELECT *
FROM dual
WHERE REGEXP_LIKE ('788975', '^[0-9]+$');

Devolverá TRUE


Espero les haya servido

Saludos!
Gondalf

4 comentarios:

  1. hey man gracias por este tip me evito hacer la funcion, por cierto no hay solucion pequeña todas son grandes

    ResponderEliminar
  2. Muchas gracias Gondalf por compartir esta función. Ahorré TIEMPO

    ResponderEliminar
  3. Gracias por compartir =)

    ResponderEliminar
  4. A mi me devuelve X si son solo números y NULL si tiene algún caracter. Saludos.

    ResponderEliminar