2015-05-01 16 views
5

Ho bisogno di visualizzare dipendenti last_name e il loro ammontare commissione da tavolo dipendenti in Oracle SQL, ma la condizione è se si incontra NULL valore Ho bisogno di stampare "No Commissione".
Per la prima parte ho scritto:Come sostituire valori nulli con un testo?

select last_name, commission_pct from employees; 

ma sono in grado di ottenere come sostituire NULL valori con "No Commissione".

risposta

15

È possibile utilizzare case espressione:

select last_name 
    , case when commision_pct is null then 'No Commission' else commision_pct end  
from employees; 

o coalesce:

select last_name 
    , coalesce(commision_pct, 'No Commission') 
from employees; 

o nvl:

select last_name 
    , nvl(commision_pct, 'No Commission') 
from employees; 

P.S. Nel caso in cui il tipo di dati commision_pct non sia varchar, è necessario utilizzare anche cast o to_char.

+0

Errore restituito: Tipo di dati incoerente: CHAR previsto ottenuto NUMERO – user308967

+1

'commision_pct' deve essere memorizzato come' varchar' nella tabella altrimenti è necessario utilizzare 'CAST' – ughai

+0

OK sì commissione_pct è memorizzato come NUMERO. – user308967

1

Per Oracle

select last_name, nvl(commission_pct,'No Commission') 
from employees; 

Per SQL

select last_name, isnull(commission_pct,"No Commission") as commission_pct 
    from employees; 
0

E 'così semplice come si può vedere, ISNULL() usato per sostituire i valori NULL per il valore di default si passa lì, quindi quello che ho fatto qui è Se "commissione_pct" avente valore NULL quindi sostituirà quello con testo "Nessuna commissione" , che ho passato in ISNULL() come secondo parametro.

select last_name, 
    ISNULL(commission_pct,'No Commission') AS commission_pct 
    from employees; 
+1

Evita solo le risposte al codice. Aggiungi qualche descrizione sulla tua risposta. – ughai

1

Un'altra alternativa, molto semplice e preciso:

nvl(to_char(commision_pct), 'No Commission') 

Dal momento che, commision_pct è NUMERO tipo di dati, to_char sarà esplicitamente convertirlo in stringa.