sql >> Databáze >  >> RDS >> PostgreSQL

Jak převést prázdné na null v PostgreSQL?

Existuje NULLIF() funkce:

SELECT NULLIF(var, '');

Pokud var má hodnotu v $ 2, dostanete NULL místo toho.
V příkladu nahrazuji prázdný řetězec:'' s NULL .

Pro typ integer není žádný prázdný řetězec . Prostě to není možné. Od NULLIF() nelze přepnout datový typ, musíte svůj vstup dezinfikovat v PHP.

Pokud jste nedefinovali výchozí sloupec, můžete také sloupec jednoduše vynechat v INSERT a bude vyplněn NULL (což je výchozí DEFAULT ).

Zkontrolujte, zda je parametr v PHP prázdný a nezahrnujte sloupec do INSERT příkaz, pokud je.

Nebo použijte PHP doslovný NULL místo toho jako Quassnoi předvádí zde .

Zbytek má smysl pouze pro typy řetězců

Chcete-li úplnou jistotu , nikdo nemůže zadat prázdný řetězec přidat CHECK omezení na tabulku:

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

Aby se vyhnuly výjimkám v důsledku toho můžete přidat spouštěč, který automaticky opraví vstup:

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. php kód pro testování pdo je k dispozici?

  2. Chyba:Tablespace for table xxx existuje. Před IMPORTEM prosím ZNEŠKODNĚTE tabulkový prostor

  3. Příklady transakcí PHP + MySQL

  4. ORA-01000:V asp.net byl překročen maximální počet otevřených kurzorů