2012-11-05 15 views
17

Mam dwa pola, które porównuję z funkcją MySQL COALESCE(). Na przykład COALESCE(Field1, Field2). Problem polega na tym, że Pole 1 jest czasami puste, ale nie puste; ponieważ nie jest pusta, COALESCE() wybiera Pole 1, nawet jeśli jest puste. W takim przypadku potrzebuję go, aby wybrać Field2.COALESCE() dla pól pustych (ale nie pustych)

Wiem, że mogę napisać instrukcję if-then-else (CASE) w zapytaniu, aby to sprawdzić, ale czy istnieje niezła prosta funkcja, taka jak COALESCE() dla pustych pól, ale nie puste?

Odpowiedz

25
SELECT IFNULL(NULLIF(Field1,''),Field2) 

NULLIF zwraca NULL jeśli Pole1 jest pusty, natomiast IFNULL zwraca Field1 jeśli nie jest pusta lub NULL i Pole2 inaczej.

+4

Mogę zrobić to samo, ale z COALESCE poprawne? 'COALESCE (NULLIF (Field1, ''), Field2)' - czy istnieje różnica prędkości/obciążenia roboczego? –

+0

Interesująca odpowiedź na temat 'COALESCE' kontra' IFNULL' tutaj: http://stackoverflow.com/questions/4747877/mysql-ifnull-vs-coalesce-which-is-faster –

+0

@John correct http://stackoverflow.com/ a/27485689/1654265 –

6

Można użyć CASE wyrażenie:

CASE WHEN Field1 <> '' THEN Field1 ELSE Field2 END 
+0

To właśnie miałem na myśli przez if-then-else; Szukałem czystszego, jednokreskowego rozwiązania –

+3

Teraz to jedna linia :) –

6

Wiem, że późno do partii tutaj, ale istnieje sposób, aby to zrobić, jednocześnie korzystając COALESCE(). To działałoby wtedy, gdyby Twoja wartość była równa NULL lub "".

Select COALESCE(NULLIF(Field1,''), Field2) 
+1

Zobacz komentarz na temat wybranej odpowiedzi :) –

+0

Dobrze, proszę! Nie widziałem tego. – Beachhouse

Powiązane problemy