sql >> Database >  >> RDS >> PostgreSQL

Hoe leeg naar null te converteren in PostgreSQL?

Er is de NULLIF() functie:

SELECT NULLIF(var, '');

Als var houdt de waarde in $2, je krijgt NULL in plaats daarvan.
In het voorbeeld vervang ik de lege string:'' met NULL .

Er is geen lege string voor het type integer . Gewoon niet mogelijk. Sinds NULLIF() kan het gegevenstype niet wijzigen, u moet uw invoer in PHP opschonen.

Als u geen kolomstandaard heeft gedefinieerd, kunt u ook de kolom weglaten in de INSERT commando en het wordt gevuld met NULL (dit is de standaard DEFAULT ).

Controleer of de parameter leeg is in PHP en neem de kolom niet op in de INSERT commando als dat zo is.

Of gebruik de PHP letterlijke NULL in plaats daarvan demonstreert Quassnoi hier .

De rest heeft alleen zin voor stringtypes

Om zeker te zijn , niemand kan een lege string invoeren voeg een CHECK toe beperking tot de tabel:

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

Om uitzonderingen te vermijden hierdoor kunt u een trigger toevoegen die de invoer automatisch herstelt:

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. Hoe SQLite Max() werkt

  2. Mijn afbeelding in mijn database wordt niet op mijn site geplaatst (PHP MySQL)

  3. PostgreSQL dump Temp-tabel

  4. .NET Oracle beheerde verbindingspooling voor gegevenstoegang werkt niet of traag