2013-04-13 25 views
13

Tôi muốn chọn một ngày (cột của tôi là một loại dấu thời gian). Nhưng khi trong cột là một ngày NULL, tôi muốn trả về một chuỗi rỗng. làm như thế nào? Tôi viết này:Chọn ngày (dấu thời gian) từ PostgreSQL dưới dạng chuỗi (char), hãy cẩn thận với giá trị NULL

SELECT 
    CASE WHEN to_char(last_post, 'MM-DD-YYYY HH24:MI:SS') IS NULL THEN '' 
     ELSE to_char(last_post, 'MM-DD-YYYY HH24:MI:SS') AS last_post END 
    to_char(last_post, 'MM-DD-YYYY HH24:MI:SS') AS last_post, content 
FROM topic; 

Nhưng nó cho thấy tôi một số sai sót, không thực sự biết lý do tại sao:

ERROR: syntax error at or near "as" 
LINE 1: ...ELSE to_char(last_post, 'MM-DD-YYYY HH24:MI:SS') AS last_po... 
                  ^

Trả lời

17

Sử dụng hàm COALESCE() là cách tiếp cận đẹp nhất, vì nó chỉ hoán đổi giá trị thay thế trong trường hợp NULL. Khả năng đọc cũng được cải thiện rất nhiều. :)

SELECT COALESCE(to_char(last_post, 'MM-DD-YYYY HH24:MI:SS'), '') AS last_post, content FROM topic; 
2

Bạn đang đặt AS của bạn trong trường hợp này?

Hãy thử:

SELECT 
    CASE WHEN last_post IS NULL THEN '' 
    ELSE to_char(last_post, 'MM-DD-YYYY HH24:MI:SS') END AS last_post, 
    content 
FROM topic; 

tôi đã không cố gắng truy vấn mặc dù.

+1

Điều này có thể được đơn giản hóa cho 'trường hợp khi last_post là null rồi '' khác ...' –

+0

@a_horse_with_no_name Bạn nói đúng, cảm ơn! Tôi chỉ tập trung vào việc di chuyển 'AS ...' sau và không nghĩ đến việc đơn giản hóa truy vấn ... Tôi sẽ sửa lỗi đó ngay bây giờ! – Jerry

+0

Vâng, bây giờ bạn không định dạng ngày như dự định. –

3
select coalesce(to_char(last_post, 'MM-DD-YYYY HH24:MI:SS'), '') as last_post, content 
from topic; 
Các vấn đề liên quan