A veces podemos necesitar saber si en una columna de tipo CHAR o VARCHAR se ha guardado un número válido.
¿Cómo lo conseguimos rápidamente?
Usando el predicado de comparación SIMILAR TO.
Ejemplo 1:
En la tabla de ALUMNOS tenemos una columna donde guardamos el número de la matrícula. Queremos verificar que solamente haya números válidos allí.
Captura 1. Si haces clic en la imagen la verás más grande
Listado 1.
SELECT ALU_MATRIC, ALU_NOMBRE FROM ALUMNOS WHERE ALU_MATRIC SIMILAR TO '[0-9]*'
Captura 2. Si haces clic en la imagen la verás más grande
Ejemplo 2:
Queremos saber cuales son los alumnos cuyo número de matrícula es incorrecto. Para ello solamente agregamos NOT, como podemos ver en el Listado 2.
Listado 2.
SELECT ALU_MATRIC, ALU_NOMBRE FROM ALUMNOS WHERE ALU_MATRIC NOT SIMILAR TO '[0-9]*'
Captura 3. Si haces clic en la imagen la verás más grande
Si lo que nos interesa es saber cuantos alumnos tienen número de matrícula correcto o número de matrícula incorrecto entonces en lugar de seleccionar la Matrícula y el Nombre usaríamos la función agregada COUNT().
Ejemplo 3:
En la tabla FACTURAS tenemos datos de las Facturas de venta.
Captura 4. Si haces clic en la imagen la verás más grande
Por alguna razón que no sabemos, la columna FAC_COBRAD es de tipo VARCHAR, no es numérica. Por eso ahora queremos verificar que todos los números allí escritos sean números válidos.
Listado 3.
SELECT FAC_NUMERO, FAC_FECVEN, FAC_COBRAD FROM FACTURAS WHERE TRIM(FAC_COBRAD) SIMILAR TO '[\+\-]?[0-9]*.?[0-9]*' ESCAPE '\'
Captura 5. Si haces clic en la imagen la verás más grande
Explicando el patrón usado en SIMILAR TO
Conclusión:
Saber si en una columna de tipo CHAR o VARCHAR hay solamente números válidos puede ser muy útil muchas veces, en este artículo se mostró una técnica para realizar esa verificación.
Artículos relacionados:
Mercury
Mar 29, 2016 @ 18:02:53
Excelente, me resolvió un «temita». Gracias
Popa Adrian Marius
Abr 01, 2016 @ 08:03:02
Reblogueó esto en firebird3.