2010-02-06 34 views
191

Trong MS SQL Server, tôi có thể làm là gì:tương đương với PostgreSQL cho ISNULL()

SELECT ISNULL(Field,'Empty') from Table

Nhưng trong PostgreSQL tôi nhận được một lỗi cú pháp. Làm cách nào để mô phỏng chức năng ISNULL()?

+1

Không bạn không thể làm điều đó trong MSSQL. Mã đó sẽ không biên dịch. 'ISNULL' nhận hai đối số và trả về giá trị thứ hai là giá trị đầu tiên là' null', ngược lại là giá trị đầu tiên. – GSerg

+0

@GSerg, bạn nói đúng. cố định điều đó. –

+0

Gserg và Byron có bạn có thể xem tại đây Ví dụ từ máy tính của tôi CHỌN ISNULL (a.FechaEntregada, '') như kiểm tra từ dbo.Amonestacion một https://msdn.microsoft.com/en-us/ library/ms184325.aspx – Juan

Trả lời

338
SELECT CASE WHEN field IS NULL THEN 'Empty' ELSE field END AS field_alias 

Hoặc nhiều thành ngữ:

SELECT coalesce(field, 'Empty') AS field_alias 
+37

+1 cho 'coalesce'. (P.S. Bạn có thể làm điều đó trong MS SQL Server, quá.) –

+1

Có những trường hợp khác để sử dụng IS NULL mặc dù, do đó, nó là tốt để biết cả hai. –

+26

Tôi nghĩ rằng nó đáng chú ý rằng nó là 'coalesce' đó là trong tiêu chuẩn SQL, với' isnull' là một chức năng MS cụ thể mà về cơ bản là 'coalesce' chỉ với hai tham số. – GSerg

-7

Tạo hàm sau

CREATE OR REPLACE FUNCTION isnull(text, text) RETURNS text AS 'SELECT (CASE (SELECT $1 " 
    "is null) WHEN true THEN $2 ELSE $1 END) AS RESULT' LANGUAGE 'sql' 

Và nó sẽ làm việc.

Bạn có thể tạo các phiên bản khác nhau với các loại thông số khác nhau.

+24

Xin vui lòng, không ai làm điều này. Sử dụng coalesce() để DBA của bạn không ghét bạn. – Jordan

58

Sử dụng COALESCE() thay vì:

SELECT COALESCE(Field,'Empty') from Table; 

Nó hoạt động giống như ISNULL, mặc dù cung cấp nhiều chức năng hơn. Coalesce sẽ trả về giá trị không null đầu tiên trong danh sách. Như vậy:

SELECT COALESCE(null, null, 5); 

lợi nhuận 5, trong khi

SELECT COALESCE(null, 2, 5); 

returns 2

liên hiệp sẽ mất một số lượng lớn các đối số. Không có tài liệu tối đa. Tôi đã thử nghiệm nó sẽ 100 đối số và nó đã thành công. Điều này sẽ rất nhiều cho phần lớn các tình huống.

16

Làm cách nào để mô phỏng hàm ISNULL()?

SELECT (Field IS NULL) FROM ... 
+4

Điều này mô phỏng chức năng chính xác của isnull, không chắc chắn lý do tại sao nó downvoted – smackshow

+3

@artur Bạn không hiểu làm thế nào isnull hoạt động. – datashaman

+0

Câu trả lời hay nhất cho câu hỏi, tất nhiên. Biểu thức này là tương đương đầy đủ của ISNULL(). COALESCE() rất thông minh và thú vị để biết nhưng nó không thể thực hiện ISNULL() trong khi nó được đóng lại. – Skrol29

10

Hãy thử:

SELECT COALESCE(NULLIF(field, ''), another_field) FROM table_name 
+1

Điều này rất hay vì nó bao hàm trường hợp khi một trường văn bản KHÔNG là rỗng, mà còn là "trống". – soulia

Các vấn đề liên quan