• Saltar al contenido principal
  • Skip to secondary menu
  • Saltar a la barra lateral principal
  • Saltar al pie de página
  • Inicio
  • Secciones
    • Ciencia de datos
    • Criptografía
    • Herramientas
    • Machine Learning
    • Noticias
    • Opinión
    • Productividad
    • Programación
      • JavaScript
      • Julia
      • Matlab
      • Python
      • R
  • Programación
    • JavaScript
    • Julia
    • Matlab
    • Python
    • R
  • Laboratorio
    • Encuestas: Tamaño de Muestra
    • Lotería: Probabilidad de Ganar
    • Reparto de Escaños (D’Hondt)
    • Tres en Raya con IA
  • Noticias
  • Boletín
  • Contacto
  • Tienda
    • Libros
    • Equipamiento de oficina
    • Equipamiento en movilidad
    • Tiendas afiliadas
      • AliExpress
      • Amazon
      • Banggood
      • GeekBuying
      • Lenovo

Analytics Lane

Ciencia e ingeniería de datos aplicada

  • Ciencia de datos
  • Machine Learning
  • IA Generativa
  • Python
  • Pandas
  • NumPy
  • Excel
  • Matlab

Comparación de números reales en SQL: Una guía completa

diciembre 11, 2024 Por Daniel Rodríguez Deja un comentario
Tiempo de lectura: 5 minutos

Trabajar con número reales suele presentar siempre desafíos, especialmente cuando se necesita comparar valores calculados por diferentes funciones. La precisión y los decimales de los valores son un problema para realizar comparaciones exactas. En SQL, comparaciones simples con números reales, como = o !=, no suelen devolver los resultados esperados. Algo que no es exclusivo de SQL, sino de la naturaleza de los números en punto flotante y las limitaciones inherentes a su representación. Por lo que es necesario usar otras estrategias para poder realizar la comparación de números reales en SQL.

En esta entrada, se analizará el problema de la comparación de números reales en SQL, sus desafíos y algunas soluciones para comparar valores con precisión controlada. Se verá cómo resolver este problema usando funciones como ROUND, CAST, rangos de tolerancia (BETWEEN) y diferencias absolutas (ABS).

Tabla de contenidos

  • 1 El desafío de los números reales
  • 2 Opciones para comparar números reales en SQL
    • 2.1 1. Redondeo con ROUND
      • 2.1.1 Ejemplo:
    • 2.2 2. Comparación dentro de un rango con BETWEEN
      • 2.2.1 Ejemplo:
    • 2.3 3. Diferencia absoluta con ABS
      • 2.3.1 Ejemplo:
    • 2.4 4. Truncamiento con CAST
      • 2.4.1 Ejemplo:
  • 3 Comparativa de métodos vistos
  • 4 Conclusiones

El desafío de los números reales

Los números reales (valores decimales o en punto flotante) son claves para muchas aplicaciones, desde los cálculos científicos hasta los sistemas financieros. Por lo que es habitual usarlos en múltiples aplicaciones. Sin embargo, debido a cómo se almacenan internamente, los números reales a menudo tienen más decimales de los que se pueden ver directamente o inconsistencias mínimas en su representación binaria.

Por ejemplo, supongamos que se desea buscar el número 1.2354 en un campo de una tabla. En la base de datos, este campo se puede almacenar con valores como 1.2353999999 o 1.2354000001 debidos a inconsistencias mínimas en su representación binaria. Aunque estos valores son cercanos al buscado, una comparación directa utilizando = fallará porque los valores no son exactamente iguales.

Curiosidad: La maldición de la dimensionalidad, o por qué añadir más datos puede empeorar tu modelo
En Analytics Lane
Curiosidad: La maldición de la dimensionalidad, o por qué añadir más datos puede empeorar tu modelo

El problema se vuelve más evidente en situaciones como:

  • Cálculos financieros, donde los resultados deben ser precisos a centavos.
  • Datos científicos, donde la precisión extendida genera valores aparentemente “iguales” pero que difieren en las últimas cifras decimales.

Publicidad


Opciones para comparar números reales en SQL

A continuación, se muestran las soluciones más habituales que se puede usar al enfrentar el desafío de comparar números reales en SQL.

1. Redondeo con ROUND

La función ROUND permite redondear un número a un número específico de decimales antes de realizar la comparación. Esto es útil cuando se necesita comparar números basándose en un nivel de precisión definido. La sintaxis básica de esta función es:

ROUND(campo, precisión)

Ejemplo:

Supongamos que se tiene una tabla llamada transacciones con un campo monto. Se desea encontrar los registros donde el monto sea aproximadamente 1.2354 con una precisión de 4 decimales. La siguiente consulta seleccionará estos valores:

SELECT *
FROM transacciones
WHERE ROUND(monto, 4) = 1.2354;

Cuándo usarlo:

  • Cuando el redondeo es suficiente para resolver las discrepancias.
  • Útil en casos donde el nivel de precisión es fijo, como en cálculos financieros que se fijan en céntimos.

Consideraciones:

  • Al redondear el valor se puede alterar ligeramente los resultados.
  • Puede ser ineficiente en tablas grandes debido a la necesidad de redondear todos los valores.

Publicidad


2. Comparación dentro de un rango con BETWEEN

Si se prefiere buscar números similares dentro de un rango específico en lugar de redondear, se puede recurrir al operador BETWEEN. Esto permite definir explícitamente un margen de tolerancia alrededor del número deseado. La sintaxis básica de este operador es:

campo BETWEEN valor_inferior AND valor_superior

Ejemplo:

Localizar los registros donde el monto esté dentro de un rango de ±0.0001 de 1.2354. Esto es lo que se consigue con la siguiente consulta:

SELECT *
FROM transacciones
WHERE monto BETWEEN 1.2353 AND 1.2355;

Cuándo usarlo:

  • Cuando se puede definir un margen de tolerancia fijo.
  • Útil en datos científicos o mediciones donde la tolerancia es aceptable.

Consideraciones:

  • Fácil de leer y entender.
  • Requiere definir explícitamente los límites del rango.

3. Diferencia absoluta con ABS

La función ABS permite calcular el valor absoluto de una expresión. Esta función se puede utilizar para verificar si la diferencia entre dos números está dentro de un rango permitido.

La sintaxis básica de esta función es:

ABS(campo1 - campo2) < tolerancia

Ejemplo:

Para localizar los registros donde la diferencia absoluta entre el monto y 1.2354 sea menor a 0.0001 se puede usar la siguiente consulta:

SELECT *
FROM transacciones
WHERE ABS(monto - 1.2354) < 0.0001;

Cuándo usarlo:

  • Cuando se necesita una tolerancia flexible sin definir límites exactos.
  • Útil en aplicaciones donde las comparaciones relativas son más importantes que los valores absolutos.

Consideraciones:

  • Requiere cálculos adicionales en cada fila.
  • Puede ser menos eficiente en tablas grandes.

Publicidad


4. Truncamiento con CAST

En lugar de redondear, CAST permite truncar un número a una cantidad específica de decimales, lo que puede ser útil cuando se desea eliminar cualquier dígito adicional sin redondear. La sintaxis básica de esta función es:

CAST(campo AS DECIMAL(m, n))

Donde m es la longitud total y n es el número de decimales.

Ejemplo:

En la siguiente consulta se trunca el valor de monto a 4 decimales y se compara con el número 1.2354.

SELECT *
FROM transacciones
WHERE CAST(monto AS DECIMAL(10, 4)) = 1.2354;

Cuándo usarlo:

  • Cuando se desea eliminar decimales adicionales en lugar de redondearlos.
  • Útil en aplicaciones donde la precisión estricta es importante.

Consideraciones:

  • Modifica la forma en que se almacenan y manejan los datos internamente.
  • Puede no ser adecuado si se necesita mantener todos los decimales originales.

Comparativa de métodos vistos

En la siguiente tabla se muestra una comparativa de los métodos vistos en esta entrada que se puede usar para comparar números reales en SQL.

MétodoVentajasDesventajasCasos de Uso
ROUNDSencillo, ajusta a una precisión fijaPuede alterar ligeramente los valoresCálculos financieros
BETWEENFácil de entender y usarRequiere calcular los límitesMediciones científicas, tolerancias
ABSFlexible y precisoMás costoso computacionalmenteComparaciones relativas
CASTElimina decimales adicionalesNo redondea, puede perder informaciónAplicaciones de precisión estricta

Publicidad


Conclusiones

La comparación de números reales en SQL, o en cualquier sistema, suele ser un desafío. Afortunadamente existen diferentes herramientas para manejar estas situaciones dependiendo de las necesidades concretas del problema:

  1. Para comparaciones con precisión fija, ROUND es una solución directa y eficiente.
  2. Si se necesita definir tolerancias claras, BETWEEN es ideal para trabajar con rangos.
  3. En aplicaciones donde se priorizan diferencias relativas, ABS proporciona flexibilidad y precisión.
  4. Cuando la precisión estricta es clave, CAST es útil para truncar valores.

Seleccionar el método adecuado dependerá del problema específico: el tipo de datos que se maneja, la precisión requerida y el impacto en el rendimiento.

Nota: La imagen de este artículo fue generada utilizando un modelo de inteligencia artificial.

¿Te ha parecido de utilidad el contenido?

¡Puntúalo entre una y cinco estrellas!

Puntuación promedio 0 / 5. Votos emitidos: 0

Ya que has encontrado útil este contenido...

¡Síguenos en redes sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?

Publicaciones relacionadas

  • Curiosidad: La maldición de la dimensionalidad, o por qué añadir más datos puede empeorar tu modelo
  • ¿Está concentrado el MSCI World? Un análisis con Gini, Lorenz y leyes de potencia
  • Curiosidad: ¿Por qué usamos p < 0.05? Un umbral que cambió la historia de la ciencia
  • Programador de tareas de Windows: Guía definitiva para automatizar tu trabajo (BAT, PowerShell y Python)
  • La Paradoja del Cumpleaños, o por qué no es tan raro compartir fecha de nacimiento
  • Cómo abrir una ventana de Chrome con tamaño y posición específicos desde la línea de comandos en Windows
  • Curiosidad: El sesgo de supervivencia, o por qué prestar atención sólo a los que “llegaron” puede engañarte
  • Documentar tu API de Express con TypeScript usando OpenAPI (Swagger)
  • Data Lake y Data Warehouse: diferencias, usos y cómo se complementan en la era del dato

Publicado en: Herramientas Etiquetado como: SQL

Interacciones con los lectores

Deja una respuesta Cancelar la respuesta

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

I accept the Terms and Conditions and the Privacy Policy

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Barra lateral principal

Suscríbete a nuestro boletín

Suscríbete al boletín semanal para estar al día de todas las publicaciones.

Política de Privacidad

Analytics Lane en redes sociales

  • Amazon
  • Bluesky
  • Facebook
  • GitHub
  • Instagram
  • Mastodon
  • Pinterest
  • RSS
  • Telegram
  • Tumblr
  • Twitter
  • YouTube

Publicidad

Entradas recientes

Data Lake y Data Warehouse: diferencias, usos y cómo se complementan en la era del dato

octubre 23, 2025 Por Daniel Rodríguez

Documentar tu API de Express con TypeScript usando OpenAPI (Swagger)

octubre 21, 2025 Por Daniel Rodríguez

Curiosidad: El sesgo de supervivencia, o por qué prestar atención sólo a los que “llegaron” puede engañarte

octubre 16, 2025 Por Daniel Rodríguez

Publicidad

Es tendencia

  • Aprovecha un 40% de descuento en Coursera Plus para impulsar tus habilidades en Ciencia de Datos e Inteligencia Artificial publicado el noviembre 9, 2024 | en Noticias, Reseñas
  • Entendiendo la validación cruzada: Selección de la profundidad óptima en un árbol de decisión publicado el septiembre 13, 2024 | en Ciencia de datos
  • Diferencias entre CPU, GPU, TPU y NPU publicado el abril 19, 2023 | en Herramientas
  • El método de Muller e implementación en Python publicado el marzo 24, 2023 | en Ciencia de datos
  • Listado de contraseñas de aplicación creadas Resolver problema de credenciales en Bitbucket publicado el marzo 16, 2022 | en Herramientas

Publicidad

Lo mejor valorado

4.9 (24)

Seleccionar filas y columnas en Pandas con iloc y loc

4.6 (16)

Archivos JSON con Python: lectura y escritura

4.4 (14)

Ordenación de diccionarios en Python mediante clave o valor

4.7 (13)

Operaciones de filtrado de DataFrame con Pandas en base a los valores de las columnas

4.5 (10)

Diferencias entre var y let en JavaScript

Publicidad

Comentarios recientes

  • Daniel Rodríguez en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • Pepe en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • CARLOS ARETURO BELLO CACERES en Justicio: La herramienta gratuita de IA para consultas legales
  • Piera en Ecuaciones multilínea en Markdown
  • Daniel Rodríguez en Tutorial de Mypy para Principiantes

Publicidad


Footer

Analytics Lane

  • Acerca de Analytics Lane
  • Boletín de noticias
  • Contacto
  • Libros
  • Lo más popular
  • Noticias
  • Tienda
  • Tiendas afiliadas

Secciones

  • Ciencia de datos
  • Criptografía
  • Herramientas
  • Machine Learning
  • Opinión
  • Productividad
  • Programación
  • Reseñas

Sobre de Analytics Lane

En Analytics Lane tratamos de explicar los principales conceptos de la ciencia e ingeniería de datos con un enfoque práctico. Los principales temas tratados son ciencia de datos, ingeniería de datos, inteligencia artificial, machine learning, deep learning y criptografía. Además, también se habla de los principales lenguajes de programación y herramientas utilizadas por los científicos e ingenieros de datos.

Copyright © 2018-2025 Analytics Lane ·Términos y condiciones ·Política de Cookies ·Política de Privacidad ·Herramientas de privacidad ·Contacto