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
hey man gracias por este tip me evito hacer la funcion, por cierto no hay solucion pequeña todas son grandes
ResponderEliminarMuchas gracias Gondalf por compartir esta función. Ahorré TIEMPO
ResponderEliminarGracias por compartir =)
ResponderEliminarA mi me devuelve X si son solo números y NULL si tiene algún caracter. Saludos.
ResponderEliminar