Minitip: SQL Server-Comprobar si un número tiene decimales

En SQL Server hay una función que comprueba si un valor es numérico (en un alarde de complejidad, esa función se llama ISNUMERIC), pero no si es un número entero o tiene decimales.

Hoy he tenido que hacer una lista con los registros de una tabla cuyo campo “escala” tuvieran decimales (vale, decimales diferentes de cero, pero vamos a dejarlo en decimales sin más). Para encontrar el modo de hacerlo, he estado buscando en foros y he encontrado funciones “hechas artesanalmente” (vamos, que SQL Server no tiene nada para comprobarlo directamente) que, en teoría, comprobaban si un número tenía o no decimales.

He probado un par, sin éxito, y me he empezado a desesperar un poco.

Y luego he dado con mi propia solución: Convertir el valor a String y ver si tiene punto decimal.

CAST(nombreCampo AS nvarchar) like '%.%'

En la query queda así:

select [CAMPOS]
from [TABLAS] 
where [CONDICIONES] AND 
(CAST(nombreCampo AS nvarchar) like '%.%')

Esta entrada es un poco tonta y me apuesto que muchos de vosotros o habéis conseguido que os funcione un procedimiento hecho para saber si un número es entero o decimal, o ya habíais dado con esta solución, pero a mi me ha costado llegar a ella (una hora, de hecho), y quería compartirla por si acaso hay más gente como yo por el mundo 🙂

……………….

Espero que esta entrada pueda ser de utilidad, y si no, como siempre, aquí tenéis un gato para compensar:

8a8ab59890b64617208fdd713421bd6b

0 thoughts on “Minitip: SQL Server-Comprobar si un número tiene decimales

  1. Hola
    Yo quiero saber como hacer una consulta que me devuelva números con decimales aunque estén almacenados como enteros, que devuelva con .00, por ejemplo 10.00.

  2. Hola,

    Otra forma de comparar si un decimal es entero o no, seria convertirlo a entero y compararlo con su valor real. Si es el mismo valor, significa que no tiene ningún decimal:

    cast(Rt_Factor_multiplicativo as int)Rt_Factor_multiplicativo

  3. Está genial, de hecho ya me había imaginado convertirlo a string, pero no se me ocurrió lo de usar el like. Pensaba convertirlo a string y usar alguna funcion que buscara un valor, en este caso el punto dentro del string y me diera su posicion dentro del string. Pero esto me gusta mucho.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *