2016-06-07 25 views
1

ich auf einem Tisch ein einfaches Update mache wobei ich drei Felder verketten:Aktualisierung mit Concat, wenn einige Felder sind NULL

Update TableA concat(Field1,Field2,Field3) 

Das Problem ist, dass in einigen Datensätzen eine oder mehrere der Felder NULL sein kann. Diese Datensätze enden nicht mit einem Update-Feld. In der folgenden Situation möchte ich das Update Field erste Datensatz BobJones sein:

+--------+--------+---------+--------------+ 
| Field1 | Field2 | Field3 | Update  | 
+--------+--------+---------+--------------+ 
| Bob | NULL | Jones | NULL   | 
+--------+--------+---------+--------------+ 
| Mary | Ann | Smith | MaryAnnSmith | 
+--------+--------+---------+--------------+ 
| Bill |  | Clinton | BillClinton | 
+--------+--------+---------+--------------+ 

Aber Update einfach ignoriert. Ich versuchte in diesem Ader Update IGNORE und das scheiterte auch. Ja, ich weiß ich könnte etwas tun, aber es wird komplexer als ich in dieser Situation gerne hätte und ich hoffte, dass es eine Version von 'Update IGNORE' geben würde, die stattdessen funktionieren würde.

Antwort

0

Sie können die Länge Null-String für jeden Nullwert einzufügen, gefangen mit IFNULL oder COALESCE:

Update TableA concat(IFNULL(Field1,''),IFNULL(Field2,''),IFNULL(Field3,'')) 

Here is a functional example

+0

Beispiel hat mir sehr geholfen danke, versagte die ursprüngliche nvl, die IFNULL hat super funktioniert. – user3649739

1

In MySQL IFNULL

concat(ifnull(Field1,''),ifnull(Field2,''),ifnull(Field3,'')) 
1

Es ist kürzer zu verwenden:

CONCAT_WS ('', Field1, Fi Feld2, Feld3);

Probe

MariaDB []> SELECT CONCAT_WS('', 'Bob',NULL,'Jones',NULL), CONCAT_WS(' ', 'Bob',NULL,'Jones',NULL), CONCAT_WS('Bob',NULL,'Jones',NULL); 
+----------------------------------------+-----------------------------------------+------------------------------------+ 
| CONCAT_WS('', 'Bob',NULL,'Jones',NULL) | CONCAT_WS(' ', 'Bob',NULL,'Jones',NULL) | CONCAT_WS('Bob',NULL,'Jones',NULL) | 
+----------------------------------------+-----------------------------------------+------------------------------------+ 
| BobJones        | Bob Jones        | Jones        | 
+----------------------------------------+-----------------------------------------+------------------------------------+ 
1 row in set (0.00 sec) 

MariaDB []>