PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment convertir vide en null dans PostgreSQL ?

Il y a le NULLIF() fonction :

SELECT NULLIF(var, '');

Si var contient la valeur dans $2, vous obtenez NULL à la place.
Dans l'exemple, je remplace la chaîne vide :'' avec NULL .

Il n'y a pas de chaîne vide pour le type entier . Tout simplement pas possible. Depuis NULLIF() ne peut pas changer le type de données, vous devez nettoyer votre entrée en PHP.

Si vous n'avez pas défini de colonne par défaut, vous pouvez également simplement omettre la colonne dans le INSERT commande et il sera rempli avec NULL (qui est la valeur par défaut DEFAULT ).

Vérifiez si le paramètre est vide en PHP et n'incluez pas la colonne dans le INSERT commande si c'est le cas.

Ou utilisez le littéral PHP NULL à la place, comme le montre Quassnoi ici .

Le reste n'a de sens que pour les types de chaînes

Pour être absolument sûr , personne ne peut entrer une chaîne vide ajouter un CHECK contrainte à la table :

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

Pour éviter les exceptions causé par cela, vous pouvez ajouter un déclencheur qui corrige automatiquement l'entrée :

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();