2011-12-16 18 views
9

Sto scrivendo un'applicazione PHP e MySQL in cui devo concatenare più valori di colonna in una singola colonna. Avrei usato la funzione concat(), ma non gestire valori nulli e concat_ws(), che non restituisce il risultato nell'output desiderato. cosa ho bisogno può essere raggiunto nel database Oracle in questo modo:Valori di concatenamento in MySQL Query (per gestire valori nulli)

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

mio problema è come posso ottenere questo stesso risultato con MySQL..without utilizzando le suddette funzioni con nome?

risposta

24

CONCAT con IFNULL:

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

Usa coalesce a concat una stringa vuota

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

È anche possibile utilizzare la funzione CONCAT_WS che provvede NULL valori

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

@Minesh : CONCAT_WS non "cura" dei valori NULL. Per illustrare questo ...

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

Nell'esempio di cui sopra, se house.address è NULL il risultato restituito non conterrà un doppio TILDA pulito (~~) come previsto. Sarà una lista separata da tilda con solo 1 tilda. ad esempio, "Fun House ~ palazzo"

+1

esso rimuoverlo insieme con la sua separazione, dove è il problema in questo? è la soluzione perfetta a meno che tu non voglia fare qualcos'altro – CME64

+1

Lo considero male perché la funzione esegue 2 compiti diversi, il secondo dei quali non è suggerito dal nome della funzione. Prima si concatena, bello, grazie, è quello che volevo. Quindi rimuove gli elementi vuoti della lista di stringhe, woah, non ti ho chiesto di farlo. La funzione dovrebbe essere denominata CONCAT_NN_WS() dove NN sta per "Not Nulls". Se chiedo al mio software di concatenare solo 5 elementi in una lista, mi aspetto un elenco di 5 elementi. Allora non mi aspetto che il software dica "Oh, a proposito, ho svuotato i cassonetti, ho dato da mangiare al gatto e telefonato a tua madre per invitarla anche per il fine settimana" –

+0

Hai ragione, questo sarà utile e dovrebbe avere stato implementato (mantenendo questo metodo anche per altri scopi). – CME64

0

Un piccolo trucco: Usa stringa vuota come separatore con CONCAT_WS (Alcune volte si wa non inserire spazi bianchi)

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