2013-04-13 10 views
13

Voglio selezionare una data (la mia colonna è un tipo di data/ora). Ma quando nella colonna è una data NULL, voglio restituire una stringa vuota. Come fare questo? Ho scritto questo:Seleziona data (data/ora) da PostgreSQL come stringa (char), attenti al valore 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; 

Ma mi mostra alcuni errori, realmente non so perché:

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

risposta

17

L'utilizzo della funzione COALESCE() rappresenta l'approccio migliore, poiché scambia semplicemente un valore sostitutivo nel caso di un valore NULL. Anche la leggibilità è notevolmente migliorata. :)

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

che stai mettendo il tuo AS all'interno del caso?

Prova:

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; 

Non ho provato la query però.

+1

Questo può essere semplificata a 'caso in cui LAST_POST è nullo allora '' altro ...' –

+0

@a_horse_with_no_name Hai ragione, grazie! Mi sono concentrato solo sullo spostamento di "AS ..." più tardi e non ho pensato a semplificare la query ... Lo aggiusterò proprio adesso! – Jerry

+0

Bene, ora non si formatta la data come previsto. –

3
select coalesce(to_char(last_post, 'MM-DD-YYYY HH24:MI:SS'), '') as last_post, content 
from topic; 
Problemi correlati