2012-12-05 8 views
11

Ciao Ho una query in cui voglio selezionare il valore di uno dei due campi a seconda se uno è vuoto.PostgreSQL: selezionare uno dei due campi a seconda di quale è vuoto

field1 and field2 

voglio selezionarli come complete_field

IF field1 is empty, then complete_field is field2 
ELSE complete_field is field1 

in PHP sarebbe stato fatto come:

$complete_field = $field1 == '' ? $field2 : $field1; 

Come dovrei fare questo in PostgreSQL?

ho provato:

SELECT 
(IF field1 = '' THEN field2 ELSE field1) AS complete_field 
FROM 
table 

ma doesnt lavoro.

Please help me :) Grazie

+1

'SELEZIONA COALESCE (campo1, campo2) AS the_field DA my_table;' avrebbe funzionato se i campi erano NULL. Sono davvero delle stringhe vuote invece di essere NULL? – wildplasser

risposta

17

Usa CASE WHEN .. THEN .. ELSE .. END, ad es .:

SELECT 
(CASE WHEN (field1 IS NULL OR field1 = '') THEN field2 ELSE field1 END) 
FROM table; 

controllo fuori a the official docs.

2

La funzione ANSI SQL Coalesce() è ciò che si desidera.

select Coalesce(field1,field2) 
from table; 
+0

Apparentemente 'field1' potrebbe essere una stringa vuota, nel qual caso l'OP non vuole il suo valore, ma il valore di' field2' invece. –

+1

Ugh. Recentemente convertito da Oracle e non mi piace questa malarkey vuota-stringa-non-nulla. –

14

Prova COALESCE con NULLIF:

SELECT COALESCE(NULLIF(field1, ''), field2) AS the_field FROM my_table;