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