PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie konvertiert man in PostgreSQL leer in null?

Es gibt den NULLIF() Funktion:

SELECT NULLIF(var, '');

Wenn var den Wert in $2 enthält, erhalten Sie NULL stattdessen.
Im Beispiel ersetze ich den leeren String:'' mit NULL .

Es gibt keine leere Zeichenkette für den Typ Integer . Einfach nicht möglich. Seit NULLIF() den Datentyp nicht wechseln können, müssen Sie Ihre Eingabe in PHP bereinigen.

Wenn Sie keinen Spaltenstandard definiert haben, können Sie die Spalte auch einfach weglassen im INSERT Befehl und wird mit NULL gefüllt (das ist der Standard DEFAULT ).

Überprüfen Sie, ob der Parameter in PHP leer ist und schließen Sie die Spalte nicht in INSERT ein Befehl, wenn ja.

Oder verwenden Sie das PHP-Literal NULL stattdessen wie Quassnoi hier demonstriert .

Der Rest macht nur Sinn für String-Typen

Um ganz sicher zu gehen , niemand kann eine leere Zeichenfolge eingeben und ein CHECK hinzufügen Beschränkung auf die Tabelle:

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

Um Ausnahmen zu vermeiden dadurch verursacht, könnten Sie einen Trigger hinzufügen, der die Eingabe automatisch korrigiert:

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