2011-12-16 8 views
9

Piszę aplikację PHP i MySQL, w której muszę łączyć wartości wielu kolumn w jedną kolumnę. Użyłbym funkcji concat(), ale ona nie obsługuje wartości null i concat_ws(), która nie zwraca wyniku w żądanym wyjściu. Co muszę można uzyskać w bazie danych Oracle tak:Wartości konkluzji w kwerendzie MySQL (w celu obsługi zerowych wartości)

Select 'The Surname Is'||last_name from employees; 

mój problem jest w jaki sposób można osiągnąć ten sam rezultat z MySQL..without użyciem wyżej wymienionych funkcji?

Odpowiedz

24

CONCAT z IFNULL:

SELECT 
    CONCAT('The Surname Is ', IFNULL(last_name, 'sadly not available')) 
FROM `employees` 
2

Zastosowanie coalesce do Concat pusty ciąg

select concat(coalesce(null, '')); 
10

Można również użyć funkcji CONCAT_WS który dba o wartości NULL

SELECT 
CONCAT_WS(' ','The Surname Is',lastname) 
FROM `employees` 
6

@Minesh : CONCAT_WS nie "zajmuje się" wartościami NULL. Aby to zilustrować ...

CONCAT_WS("~",house.name,house.address,house.type) 

W powyższym przykładzie, jeśli house.address jest NULL zwrócony wynik nie będzie zawierał schludny podwójne Tilda (~~), jak oczekiwano. Będzie to lista oddzielona tyldą z tylko jedną tyldą. np „Fun House ~ dwór”

+1

to nie usunąć go wraz z jego separator, gdzie jest problem w tym? to jest schludne rozwiązanie, chyba że chcesz zrobić coś innego. – CME64

+1

Uważam, że jest źle, ponieważ funkcja wykonuje 2 różne zadania, z których druga nie jest sugerowana przez nazwę funkcji. Najpierw się łączy, świetnie, dzięki, tego właśnie chciałem. Następnie usuwa puste elementy listy ciągów znaków, woah, nie prosiłem o to. Funkcja powinna mieć nazwę CONCAT_NN_WS(), gdzie NN oznacza "Not Nulls". Jeśli poproszę moje oprogramowanie, aby połączyło 5 rzeczy do listy, oczekuję listy 5 przedmiotów. Nie oczekuję wtedy, że oprogramowanie powie: "A tak przy okazji, opróżniłem kosze, nakarmiłem kota i zadzwoniłem do twojej mamy, aby zaprosić ją na weekend" –

+0

Masz rację, to będzie przydatne i powinno został wdrożony (zachowując tę ​​metodę również w innych celach). – CME64

0

mały trick: Użyj pusty ciąg jak separatorze z CONCAT_WS (Niektóre razy wa wstawiać spacji)

CONCAT_WS('','The Surname Is:',lastname) 
FROM `employees` 
Powiązane problemy