Có NULLIF()
chức năng:
SELECT NULLIF(var, '');
Nếu var
giữ giá trị bằng $ 2, bạn nhận được NULL
thay vào đó.
Trong ví dụ, tôi thay thế chuỗi trống:''
với NULL
.
Không có chuỗi trống nào cho kiểu số nguyên . Chỉ là không thể. Kể từ NULLIF()
không thể chuyển đổi kiểu dữ liệu, bạn phải khử trùng đầu vào của mình bằng PHP.
Nếu bạn không xác định cột mặc định, bạn cũng có thể chỉ cần bỏ qua cột trong INSERT
và nó sẽ được điền bằng NULL
(là DEFAULT
mặc định ).
Kiểm tra xem tham số có trống trong PHP và không bao gồm cột trong INSERT
ra lệnh nếu đúng như vậy.
Hoặc sử dụng NULL theo nghĩa đen của PHP thay vì như Quassnoi trình bày tại đây .
Phần còn lại chỉ có ý nghĩa đối với các loại chuỗi
Để đảm bảo hoàn toàn chắc chắn , không ai có thể nhập một chuỗi trống, hãy thêm CHECK
ràng buộc vào bảng:
ALTER TABLE tr_view
ADD CONSTRAINT tr_view_age_not_empty CHECK (age <> '');
Để tránh ngoại lệ do điều này gây ra, bạn có thể thêm trình kích hoạt tự động sửa lỗi đầu vào:
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();