Ich habe eine Datei, die 3 bis 4 Spalten mit numerischen Werten enthalten kann, die durch Komma getrennt sind. Leere Felder werden mit der Ausnahme definiert, wenn sie sich am Ende der Zeile befinden:
1,2,3,4,5
1,2,3,,5
1,2,3
Die folgende Tabelle wurde in MySQL erstellt:
+ ------- + -------- + ------ + ----- + --------- + ------- + | Feld | Geben Sie | ein Null | Schlüssel | Standard | Extra | + ------- + -------- + ------ + ----- + --------- + ------- + | eins | int (1) | JA | | NULL | | | zwei | int (1) | JA | | NULL | | | drei | int (1) | JA | | NULL | | | vier | int (1) | JA | | NULL | | | fünf | int (1) | JA | | NULL | | + ------- + -------- + ------ + ----- + --------- + ------- +
Ich versuche, die Daten mit dem Befehl MySQL LOAD zu laden:
LOAD DATA INFILE '/tmp/testdata.txt' INTO TABLE moo FIELDS
TERMINATED BY "," LINES TERMINATED BY "\n";
Die resultierende Tabelle:
+ ------ + ------ + ------- + ------ + ------ + | eins | zwei | drei | vier | fünf | + ------ + ------ + ------- + ------ + ------ + | 1 | 2 | 3 | 4 | 5 | | 1 | 2 | 3 | 0 | 5 | | 1 | 2 | 3 | NULL | NULL | + ------ + ------ + ------- + ------ + ------ +
Das Problem liegt in der Tatsache, dass MySQL aus irgendeinem Grund nicht den Standardwert der Spalte (NULL) verwendet und Null verwendet, wenn ein Feld in den Rohdaten leer und nicht definiert ist. NULL wird korrekt verwendet, wenn das Feld insgesamt fehlt.
Leider muss ich zu diesem Zeitpunkt in der Lage sein, zwischen NULL und 0 zu unterscheiden, daher wäre jede Hilfe willkommen.
Danke S.
bearbeiten
Die Ausgabe von SHOW WARNINGS:
+ --------- + ------ + -------------------------------- ------------------------ + | Level | Code | Nachricht | + --------- + ------ + -------------------------------- ------------------------ + | Warnung | 1366 | Falscher ganzzahliger Wert: '' für Spalte 'vier' in Zeile 2 | | Warnung | 1261 | Zeile 3 enthält nicht für alle Spalten Daten | Warnung | 1261 | Zeile 3 enthält nicht für alle Spalten Daten + --------- + ------ + -------------------------------- ------------------------ +
quelle
LOAD DATA
. Weitere Informationen zu Änderungen des Datenschemas finden Sie im Abschnitt Beispiele für d6tstack SQL .Antworten:
Dies wird tun, was Sie wollen. Es liest das vierte Feld in eine lokale Variable und setzt dann den tatsächlichen Feldwert auf NULL, wenn die lokale Variable eine leere Zeichenfolge enthält:
Wenn sie möglicherweise alle leer sind, lesen Sie sie alle in Variablen und haben mehrere SET-Anweisungen wie folgt:
quelle
''
wenn sie eine CSV-Datei (IFNULL(Col,'')
inSELECT INTO OUTFILE
Abfrage verwenden) für Excel herunterladen. Uploads akzeptieren sie jedoch als null, anstatt sich\N
in der CSV-Datei damit befassen zu müssen . Vielen Dank!0
, in die konvertiert werden sollNULL
(da es nicht möglich ist, für die betreffenden Daten einen Nullwert zu haben), sowie leere Zeichenfolgen. Wie kann sichergestellt werden, dass sowohl Nullen als auch leere Zeichenfolgen in konvertiert werdenNULL
?nullif(@vone, 0)
.Das MySQL-Handbuch sagt:
Sie müssen also die Leerzeichen wie folgt durch \ N ersetzen:
quelle
Fields enclosed by: "
ist das"\N"
von"name",\N,"stuff"
\N
als Bezeichnung akzeptiert wirdNULL
. Verwenden Sie stattdessenNULL
wie in diesem Beispiel:"name","age",NULL,"other","stuff"
Das Verhalten ist je nach Datenbankkonfiguration unterschiedlich. Im strengen Modus würde dies einen Fehler auslösen, sonst eine Warnung. Die folgende Abfrage kann zum Identifizieren der Datenbankkonfiguration verwendet werden.
quelle
Verarbeiten Sie Ihre Eingabe-CSV vor, um leere Einträge durch \ N zu ersetzen.
Versuch einer Regex: s / ,, /, \ n, / g und s /, $ /, \ N / g
Viel Glück.
quelle
(Variable1, @ Variable2, ..) SET Variable2 = nullif (@ Variable2, '' oder '') >> Sie können eine beliebige Bedingung setzen
quelle
Variablen anzeigen
Show variables like "`secure_file_priv`";
Hinweis: Bewahren Sie Ihre CSV-Datei an dem mit dem obigen Befehl angegebenen Speicherort auf.
Hinweis: Hier enthält die
date
Spalte ' ' einige leere Werte in der CSV-Datei.quelle