MySQL-Abfrage Ersetzen Sie NULL durch eine leere Zeichenfolge in Select


70

Wie ersetze ich einen NULL-Wert in der Auswahl durch eine leere Zeichenfolge? Es sieht nicht sehr professionell aus, "NULL" -Werte auszugeben.

Dies ist sehr ungewöhnlich und aufgrund meiner Syntax würde ich erwarten, dass es funktioniert. Ich hoffe auf eine Erklärung, warum es nicht so ist.

select CASE prereq WHEN (prereq IS NULL) THEN " " ELSE prereq end from test;

Beispiel dafür, wie die Originaltabelle aussieht, was ich möchte und welche tatsächlichen Drucke:

original     wanted      what actually prints
--------     ------      ---------------------
value1       value1      
NULL                     NULL
value2       value2      
NULL                     NULL

Wie Sie sehen können, macht es das Gegenteil von dem, was ich will, daher habe ich versucht, IS NULL auf IS NOT NULL zu drehen, und das hat es natürlich nicht behoben. Ich habe auch versucht, die Position von when case zu tauschen, was nicht funktioniert hat.

Bearbeiten: Es scheint, dass die 3 unten angegebenen Lösungen alle die Aufgabe erfüllen. Grüße

select if(prereq IS NULL ," ",prereq ) from test
select IFNULL(prereq,"") from test
select coalesce(prereq, '') from test

2
Ich denke, (prereq IS NULL)sollte nur lesenNULL
ScottJShea

Antworten:


7

Einige dieser integrierten Funktionen sollten funktionieren:

Coalesce
Is Null
IfNull

111

Wenn Sie wirklich alle Werte einschließlich der NULL-Werte ausgeben müssen:

select IFNULL(prereq,"") from test

Wenn Sie IFNULL mit groupBy verwenden, sollte es einen Alias ​​geben: Wählen Sie IFNULL (Voraussetzung, "") als n aus der Testgruppe mit n aus.
Salar

82
SELECT COALESCE(prereq, '') FROM test

Coalesce gibt das erste Nicht-Null-Argument zurück, das von links nach rechts an Coalesce übergeben wurde. Wenn alle Argumente null sind, wird null zurückgegeben, aber wir erzwingen dort eine leere Zeichenfolge, sodass keine Nullwerte zurückgegeben werden.

Beachten Sie auch, dass der COALESCE- Operator in Standard-SQL unterstützt wird. Dies ist bei IFNULL nicht der Fall . Es ist also eine gute Praxis, erstere zu verwenden. Beachten Sie außerdem, dass COALESCE mehr als zwei Parameter unterstützt und diese durchläuft, bis eine Nicht-Null-Übereinstimmung gefunden wird.


1
Einverstanden ist es erwähnenswert, die MySQL-Spezifität von IFNULL zu beachten. Es funktioniert im OP-Fall, aber möglicherweise nicht in anderen.
JScoobyCed

18

Versuchen Sie es unten;

  select if(prereq IS NULL ," ",prereq ) from test

Wie lasse ich weg, wenn null? (Nicht auswählen?)
Pathros

6
select IFNULL(`prereq`,'') as ColumnName FROM test

Diese Abfrage wählt "vorausgesetzte" Werte aus. Wenn einer der Werte null ist, wird eine leere Zeichenfolge angezeigt, wie Sie möchten. Es werden also alle Werte außer den NULL-Werten leer angezeigt


2
Fügen Sie eine Erklärung hinzu, was dieser Code bewirkt. Ein Codebeispiel mag sofort nützlich sein, aber eine Erklärung ist auf lange Sicht weitaus nützlicher.
JustCarty

3

Die ursprüngliche Form ist nahezu perfekt. Nach CASE müssen Sie lediglich die Voraussetzungen weglassen :

SELECT
  CASE
    WHEN prereq IS NULL THEN ' '
    ELSE prereq
  END AS prereq
FROM test;

2

Versuchen Sie es COALESCE. Es gibt den ersten Nicht-NULL-Wert zurück.

SELECT COALESCE(`prereq`, ' ') FROM `test`

0

Versuchen Sie dies, dies sollte auch diese leeren Zeilen auch loswerden:

SELECT prereq FROM test WHERE prereq IS NOT NULL;

Dies filtert die Ausgabe, von der ich nicht glaube, dass das OP danach ist
Simon

Dies ist meine Lösung basierend auf seinem Beispiel. Ich sehe nicht wirklich, warum Leerzeilen professioneller sind als NULL-Werte.
Hunter McMillen

-1

Ich habe Nullen (NULL als Standardwert) in einem nicht erforderlichen Feld in einer Datenbank. Sie bewirken nicht, dass der Wert "null" auf einer Webseite angezeigt wird. Der Wert "null" wird jedoch beim Erstellen von Daten über ein Webseiten-Eingabeformular festgelegt. Dies lag daran, dass JavaScript beim Übermitteln der Daten über AJAX und jQuery null nahm und es in die Zeichenfolge "null" transkribierte. Stellen Sie sicher, dass dies nicht das Grundproblem ist, da das einfache Ausführen des oben genannten Problems nur eine Hilfe für das eigentliche Problem darstellt. Ich habe auch die obige Lösung IFNULL (...) als Doppelmaß implementiert. Vielen Dank.


-1

Ich weiß, dass dies eine alte Frage ist, aber ich habe die beste Lösung ohne Änderungsabfrage und auch Unterstützung für die SELECT * -Anweisung erhalten

foreach ($row as &$value) {
  if($value==null){
     $value="";
  }
}

Es gibt weder eine beste Lösung noch ist diese Lösung für die Frage des OP geeignet (bei der es sich um SQL und nicht um Javascript handelt).
Markus Safar

-2
UPDATE your_table set your_field="" where your_field is null

Ich habe die Frage nicht sehr gut verstanden, sorry !! Dies ersetzt Nullwerte durch leere Werte, aber um Ihr Problem zu lösen, überprüfen Sie meine zweite Antwort.
Abderrahmane BECHIKH
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.