PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como converter vazio para nulo no PostgreSQL?


Existe o NULLIF() função:
SELECT NULLIF(var, '');

Se var mantém o valor em $ 2, você obtém NULL em vez disso.
No exemplo, substituo a string vazia:'' com NULL .

Não há nenhuma string vazia para o tipo integer . Simplesmente não é possível. Desde NULLIF() não pode mudar o tipo de dados, você tem que limpar sua entrada no PHP.

Se você não definiu um padrão de coluna, também pode simplesmente omitir a coluna no INSERIR comando e será preenchido com NULL (que é o padrão DEFAULT ).

Verifique se o parâmetro está vazio no PHP e não inclua a coluna no INSERT comando se for.

Ou use o PHP literal NULL em vez disso, como Quassnoi demonstra aqui .

O resto só faz sentido para tipos de string


Para ter certeza absoluta , ninguém pode inserir uma string vazia adicione um CHECK restrição à tabela:
ALTER TABLE tr_view
ADD CONSTRAINT tr_view_age_not_empty CHECK (age <> '');

Para evitar exceções causado por isso, você pode adicionar um gatilho que corrija a entrada automaticamente:
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();