2013-04-13 8 views
13

Chcę wybrać datę (moja kolumna jest typ sygnatury czasowej). Ale gdy w kolumnie jest data NULL, chcę zwrócić pusty ciąg. Jak to zrobić? Napisałem to:Wybierz datę (znacznik czasu) z PostgreSQL jako ciąg znaków (uwaga), uważaj na wartość 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; 

Ale to pokazuje mi jakieś błędy, naprawdę nie wiem, dlaczego:

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

Odpowiedz

17

Korzystanie z funkcji jest najmilszym podejściem, ponieważ po prostu zamienia się w zastępczą wartość w przypadku NULL. Znacznie poprawiono również czytelność. :)

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

Ty oddanie AS w przypadku?

Spróbuj:

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; 

nie próbowałem zapytania chociaż.

+1

ten można uprościć do 'przypadku gdy last_post jest zerowy, a następnie '' else ...' –

+0

@a_horse_with_no_name Masz rację, dzięki! Skoncentrowałem się tylko na przeniesieniu "AS ..." później i nie myślałem o uproszczeniu zapytania ... Naprawię to teraz! – Jerry

+0

Teraz nie formatujesz daty zgodnie z przeznaczeniem. –

3
select coalesce(to_char(last_post, 'MM-DD-YYYY HH24:MI:SS'), '') as last_post, content 
from topic; 
Powiązane problemy