sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo quitar los ceros finales de un decimal en PostgreSQL

Problema:

Le gustaría eliminar los ceros finales de la parte fraccionaria de un número decimal.

Ejemplo:

Nuestra base de datos tiene una tabla llamada ribbon con datos en las columnas id , nombre y ancho (en metros, denotados por un número decimal con una parte fraccionaria de 4 dígitos).

id nombre ancho
1 Grande Satén N24 1,2000
2 Creación Yc2 0,5500
3 Tres colores 4F1 3.2050
4 Cinta azul LB1 0,1265

Obtengamos los nombres de las cintas junto con su ancho en metros, pero sin ceros al final.

Solución:

Usaremos el operador ‘::’ para convertir el número decimal a un tipo de datos REAL. Esta es la consulta que escribirías:

SELECT name, 
  width::REAL 
FROM ribbon;

Aquí está el resultado:

nombre nuevo_ancho
Satén grande N24 1.2
Creación Yc2 0,55
Tres colores 4F1 3.205
Cinta azul LB1 0,1265

Discusión:

Usa el :: operador para convertir un número decimal que contiene ceros finales en un número sin ceros adicionales. Este operador convierte el valor de la izquierda al tipo de datos colocado a la derecha.

En nuestro ejemplo, el valor decimal de ancho se convirtió al tipo de datos REAL, que no muestra ceros finales. La cinta 'Large Satin N24' tiene un width valor de 1,2000, pero no necesitamos ceros en la parte fraccionaria de este número. Por lo tanto, convertimos al tipo de datos REAL para cortarlos (en nuestro ejemplo, se eliminaron tres ceros). Es una forma conveniente de mostrar el número porque elimina solo los ceros finales; por ejemplo, 'Blue Ribbon LB1' no tiene ceros finales después del punto decimal, por lo que su valor sigue siendo el mismo después de la conversión.

Si tiene el mismo número de ceros en la parte fraccionaria de todos sus valores, use el TRUNC() función. Toma dos argumentos:el valor/nombre de la columna que contiene el número y un número entero que indica el número deseado de dígitos fraccionarios; el resto se corta. Mire el mismo ejemplo con diferentes valores en la columna width :

id nombre ancho
1 Grande Satén N24 1.200
2 Creación Yc2 0.500
3 Tres colores 4F1 3.200
4 Cinta azul LB1 0.100

Solución 2:

Esta es la consulta que escribirías:

SELECT name, 
  TRUNC(width,1) 
FROM ribbon;

Aquí está el resultado:

nombre nuevo_ancho
Satén grande N24 1.0
Creación Yc2 0,5
Tres colores 4F1 3.2
Cinta azul LB1 0.1

Solo se muestra un dígito en la parte decimal. Tenga en cuenta que TRUNC() corta todos los dígitos, no solo los ceros.