PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да конвертирате празно в null в PostgreSQL?

Има NULLIF() функция:

SELECT NULLIF(var, '');

Ако var държи стойността в $2, получавате NULL вместо това.
В примера замествам празния низ:'' с NULL .

Няма няма празен низ за типа integer . Просто не е възможно. Тъй като NULLIF() не можете да превключите типа данни, трябва да дезинфекцирате въвеждането си в PHP.

Ако не сте дефинирали колона по подразбиране, можете също просто да пропуснете колоната в INSERT и ще бъде попълнено с NULL (което е DEFAULT по подразбиране ).

Проверете дали параметърът е празен в PHP и не включвайте колоната в INSERT команда, ако е.

Или използвайте PHP литерала NULL вместо това, както Quassnoi демонстрира тук .

Останалото има смисъл само за типове низове

За да бъдете абсолютно сигурни , никой не може да въведе празен низ, добавете CHECK ограничение към таблицата:

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

За избягване на изключения причинено от това, можете да добавите тригер, който автоматично коригира въвеждането:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да създам потребител на postgresql с fabric

  2. Можем ли да взаимодействаме с psql скрипт?

  3. Как да филтрирате колона с масив на PostgreSQL с API за JPA критерии?

  4. Заявките на Postgres в производството водят до необичайно високи I/O за четене на диск

  5. Как да попълните база данни postgresql с Mrjob и Hadoop