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

¿Cómo convertir vacío a nulo en PostgreSQL?

Existe el NULLIF() función:

SELECT NULLIF(var, '');

Si var tiene el valor en $2, obtienes NULL en su lugar.
En el ejemplo, reemplazo la cadena vacía:'' con NULL .

No hay cadena vacía para el tipo entero . Simplemente no es posible. Desde NULLIF() no puede cambiar el tipo de datos, debe desinfectar su entrada en PHP.

Si no definió una columna predeterminada, también puede simplemente omitir la columna en el INSERT comando y se llenará con NULL (que es el DEFAULT predeterminado ).

Compruebe si el parámetro está vacío en PHP y no incluya la columna en INSERT comando si lo es.

O use el PHP literal NULL en cambio, como demuestra Quassnoi aquí .

El resto solo tiene sentido para tipos de cadena

Para estar absolutamente seguro , nadie puede ingresar una cadena vacía agregar un CHECK restricción a la tabla:

ALTER TABLE tr_view
ADD CONSTRAINT tr_view_age_not_empty CHECK (age <> '');

Para evitar excepciones causado por esto, puede agregar un activador que corrija la entrada automáticamente:

CREATE OR REPLACE FUNCTION trg_tr_view_avoid_empty()
  RETURNS trigger AS
$func$
BEGIN
   IF NEW.age = '' THEN
      NEW.age := NULL;
   END IF;

   IF NEW.month = '' THEN
      NEW.month := NULL;
   END IF;

   RETURN NEW;
END
$func$  LANGUAGE plpgsql

CREATE TRIGGER tr_view_avoid_empty
BEFORE INSERT OR UPDATE ON tr_view
FOR EACH ROW
WHEN (NEW.age = '' OR NEW.month = '')
EXECUTE PROCEDURE trg_tr_view_avoid_empty();