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

Come convertire vuoto in null in PostgreSQL?

C'è il NULLIF() funzione:

SELECT NULLIF(var, '');

Se var contiene il valore in $2, ottieni NULL invece.
Nell'esempio sostituisco la stringa vuota:'' con NULL .

Non c'è nessuna stringa vuota per il tipo intero . Semplicemente non possibile. Dal momento che NULLIF() non è possibile cambiare il tipo di dati, devi disinfettare il tuo input in PHP.

Se non hai definito una colonna predefinita, puoi anche omettere semplicemente la colonna nel INSERT comando e verrà riempito con NULL (che è il DEFAULT predefinito ).

Controlla se il parametro è vuoto in PHP e non includere la colonna in INSERT comando se lo è.

Oppure usa il valore letterale PHP NULL invece, come dimostra Quassnoi qui .

Il resto ha senso solo per i tipi di stringa

Per assicurarsi assolutamente , nessuno può inserire una stringa vuota aggiungere un CHECK vincolo alla tabella:

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

Per evitare eccezioni a causa di ciò, potresti aggiungere un trigger che corregge automaticamente l'input:

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