sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur konverterar man tomt till null i PostgreSQL?

Det finns NULLIF() funktion:

SELECT NULLIF(var, '');

Om var har värdet i $2 får du NULL istället.
I exemplet ersätter jag den tomma strängen:'' med NULL .

Det finns ingen tom sträng för typen heltal . Bara inte möjligt. Sedan NULLIF() inte kan byta datatyp, du måste rensa din input i PHP.

Om du inte har definierat en kolumnstandard kan du också bara utelämna kolumnen i INSERT kommandot och det kommer att fyllas med NULL (vilket är standard DEFAULT ).

Kontrollera om parametern är tom i PHP och inkludera inte kolumnen i INSERT kommandot om det är det.

Eller använd PHP literal NULL istället som Quassnoi demonstrerar här .

Resten är bara vettigt för strängtyper

För att försäkra dig helt , ingen kan ange en tom sträng lägg till en CHECK begränsning till tabellen:

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

För att undvika undantag orsakat av detta kan du lägga till en trigger som fixar inmatning automatiskt:

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


  1. Hur Tanh() fungerar i PostgreSQL

  2. Hur får man en främmande nyckel som pekar på två primärnycklar?

  3. Beräkna tidsskillnad i SQL med skift

  4. Fjärrstyrd MySql-anslutning från annan server