En PostgreSQL, la función COALESCE devuelve el primer argumento no nulo. Generalmente se utiliza con la sentencia SELECT para manejar valores nulos de manera efectiva.

Syntax: COALESCE (argument_1, argument_2, …);

La función COALESCE acepta un número ilimitado de argumentos. Devuelve el primer argumento que no es nulo. Si todos los argumentos son nulos, la función COALESCE devolverá null. a función COALESCE evalúa los argumentos de izquierda a derecha hasta encontrar el primer argumento no nulo. Todos los argumentos restantes a partir del primer argumento no nulo no se evalúan.

Ejemplo:
Para la demostración vamos a crear primero una tabla (digamos, items) utilizando la siguiente sentencia:

CREATE TABLE items ( ID serial PRIMARY KEY, product VARCHAR (100) NOT NULL, price NUMERIC NOT NULL, discount NUMERIC);

Hay cuatro campos en la tabla items :

  • id: la clave primaria que identifica el elemento en la tabla items.
  • producto: el nombre del producto.
  • precio: el precio del producto.
  • descuento: el descuento del producto.

Ahora insertamos algunos registros en la tabla items utilizando la sentencia INSERT de la siguiente manera:

INSERT INTO items (product, price, discount)VALUES ('A', 1000, 10), ('B', 1500, 20), ('C', 800, 5), ('D', 500, NULL);

Por último, consultamos los precios netos de los productos utilizando lo siguiente:

SELECT product, (price - discount) AS net_priceFROM items;

Esto nos llevará a lo siguiente:

Si nos fijamos en la cuarta fila, nos daremos cuenta de que el precio neto del producto D es nulo, lo cual no parece correcto. El problema es que el descuento del producto D es nulo, por lo tanto cuando tomamos el valor nulo para calcular el precio neto, PostgreSQL devuelve nulo. Para obtener el precio correcto, tenemos que asumir que si el descuento es nulo, es cero. Entonces podemos utilizar la función COALESCE de la siguiente manera:

SELECT product, (price - COALESCE(discount, 0)) AS net_priceFROM items;

Salida:

Etiquetas del artículo :

admin

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

lg