PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm thế nào để chuyển đổi rỗng thành null trong PostgreSQL?

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách thêm số lượng đang chạy vào các hàng trong một 'chuỗi' các ngày liên tiếp

  2. Lỗi PostgreSQL:Chương trình không thể khởi động vì thiếu libpq.dll trên máy tính của bạn

  3. Làm thế nào để tạo một chỉ mục duy nhất với điều kiện và truy vấn con trong PostgreSQL?

  4. Làm cách nào để dừng / hủy một truy vấn trong postgresql?

  5. Để giảm một chỉ mục với psycopg2 có hiệu lực trước hoặc sau khi cam kết?