• 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
  • Python
  • Pandas
  • NumPy
  • Matlab
  • Julia
  • Excel
  • IA Generativa

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.

¡Nuevo video! Aprende a seleccionar datos en Pandas con .iloc y .loc
En Analytics Lane
¡Nuevo video! Aprende a seleccionar datos en Pandas con .iloc y .loc

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

  • ¡Nuevo video! Aprende a seleccionar datos en Pandas con .iloc y .loc
  • ¡Nuevo video! Aprende a eliminar filas y columnas en Pandas sin errores
  • Nuevo video en el canal: Cómo eliminar duplicados de una lista en Python
  • Nuevo video en YouTube: Trabajando con archivos JSON en Python
  • Nuevo video: Leer y guardar archivos Excel y CSV en Python
  • Nuevo video: cómo activar copiar y pegar en VirtualBox fácilmente
  • Cómo extender el tamaño de un disco en Rocky Linux 9 usando growpart y LVM
  • Curiosidad: El origen del análisis exploratorio de datos y el papel de John Tukey
  • Cómo calcular el tamaño de la muestra para encuestas

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

Cómo calcular el tamaño de la muestra para encuestas

septiembre 9, 2025 Por Daniel Rodríguez

Curiosidad: El origen del análisis exploratorio de datos y el papel de John Tukey

septiembre 4, 2025 Por Daniel Rodríguez

Cómo extender el tamaño de un disco en Rocky Linux 9 usando growpart y LVM

septiembre 2, 2025 Por Daniel Rodríguez

Publicidad

Es tendencia

  • Operaciones de filtrado de DataFrame con Pandas en base a los valores de las columnas publicado el mayo 10, 2019 | en Python
  • pandas Pandas: Obtener el nombre de las columnas y filas en Pandas publicado el diciembre 7, 2020 | en Python
  • pandas Pandas: Cómo iterar sobre las filas de un DataFrame en Pandas publicado el septiembre 13, 2021 | en Python
  • Sistema de ecuaciones Sistemas de ecuaciones lineales con numpy publicado el octubre 29, 2018 | en Python
  • Método del codo (Elbow method) para seleccionar el número óptimo de clústeres en K-means publicado el junio 9, 2023 | en Ciencia de datos

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

  • 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
  • Javier 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