sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan konverteres tom til null i PostgreSQL?

Der er NULLIF() funktion:

SELECT NULLIF(var, '');

Hvis var holder værdien i $2, får du NULL i stedet for.
I eksemplet erstatter jeg den tomme streng:'' med NULL .

Der er ingen tom streng for typen heltal . Bare ikke muligt. Siden NULLIF() ikke kan skifte datatype, skal du rense dit input i PHP.

Hvis du ikke har defineret en kolonnestandard, kan du også bare udelade kolonnen i INSERT kommando, og den vil blive udfyldt med NULL (som er standard DEFAULT ).

Tjek om parameteren er tom i PHP, og medtag ikke kolonnen i INSERT kommando, hvis det er.

Eller brug PHP literal NULL i stedet demonstrerer Quassnoi her .

Resten giver kun mening for strengtyper

For at være helt sikker , ingen kan indtaste en tom streng tilføje en CHECK begrænsning til tabellen:

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

For at undgå undtagelser forårsaget af dette, kan du tilføje en trigger, der retter input automatisk:

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. CASE og COALESCE kortslutningsevaluering fungerer med sekvenser i PL/SQL, men ikke i SQL

  2. Echo JS onclick fill funktion AJAX virker ikke

  3. Mysql FIND_IN_SET i where-sætning

  4. Hvordan ændres MySQL root-kontoadgangskoden på CentOS7?