2012-12-05 6 views
11

Witam Mam zapytanie, w którym chcę wybrać wartość jednego z dwóch pól, w zależności od tego, czy jest pusty.PostgreSQL: Wybierz jedno z dwóch pól w zależności od tego, które jest puste

field1 and field2 

chcę je wybrać jako complete_field

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

w PHP byłoby zrobić tak:

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

Jak zrobić to w PostgreSQL?

Próbowałem:

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

Ale nie robi praca.

Proszę mi pomóc :) Dzięki

+1

'SELECT COALESCE (pole1, pole2) AS the_field OD my_table;' będzie działać, jeśli pola były NULL. Czy naprawdę są pustymi strunami, zamiast być NULL? – wildplasser

Odpowiedz

17

Zastosowanie CASE WHEN .. THEN .. ELSE .. END, np .:

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

Sprawdź to na the official docs.

2

Funkcja ANSI SQL Coalesce() jest tym, czego potrzebujesz.

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

Wygląda na to, że 'field1' może być pustym łańcuchem, w którym to przypadku OP nie chce jego wartości, lecz zamiast niej jest wartość' field2'. –

+1

Ugh. Ostatnio przekonwertowałem z Oracle i nie podoba mi się ten malarkey z pustym ciągiem znaków. –

14

Spróbuj COALESCE z NULLIF:

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