Leere Zellen in float Spalte

kidchino

Benutzer
Beiträge
12
Hey zusammen,
ich bin neu hier und hab eine Frage.
Ich möchte eine Spalte mit Dezimalzahlen (Nachkommastellen unterscheiden sich, und auch die Ziffern insgesamt) erstellen (also eine ganze Tabelle eigentlich). Später möchte ich auch gern damit rechnen können. Die Werte erstrecken sich von 0-100. Nur leider gibt es aber auch Missing Values. Ich habe als Default NULL gesetzt aber es kommt immer ein Fehler und des wird '0' anstelle von NULL geschrieben, wenn die Zelle eigentlich leer ist.
Wie gehe ich mit leeren Felder und Zahlen um?
Funktionieren Float und NULL nicht zusammen, weil NULL keine Zahl ist?
Ist double oder decimal besser geeignet.
Aktuelle habe ich einen Ersatzwert gewählt (-77), der definitiv nicht vorkommt aber richtig optimal ist das nicht.
Jemand eine Idee von Euch?
LG
kid
 
Werbung:
Hey zusammen,
ich bin neu hier und hab eine Frage.
Ich möchte eine Spalte mit Dezimalzahlen (Nachkommastellen unterscheiden sich, und auch die Ziffern insgesamt) erstellen (also eine ganze Tabelle eigentlich). Später möchte ich auch gern damit rechnen können. Die Werte erstrecken sich von 0-100. Nur leider gibt es aber auch Missing Values. Ich habe als Default NULL gesetzt aber es kommt immer ein Fehler und des wird '0' anstelle von NULL geschrieben, wenn die Zelle eigentlich leer ist.

NULL ist schon okay. Hab ich Dir, glaube ich, woanders schon erklärt, oder?
 
@akretschmer,
NULL ist schon okay. Hab ich Dir, glaube ich, woanders schon erklärt, oder?
Das weiß ich nicht, zumindest ist mir Dein UserName nicht bekannt, aber wenn Du schon so fragst, wahrscheinlich ja.
Ab und an muss man Foren wohl wechseln, wenn Mitglieder nicht helfen wollen sondern nur *sticheln* (wie es woanders tituliert wurde).

Sicherlich ist es super nervig, wenn Anfänger in Foren auftauchen und einfache Fragen stellen, die für jeden Informatiker so offensichtlich sind, wie für mich das Auftreten des "incumbents curse". Aber es sind halt nicht alle Menschen Programmierer und Informatiker, sowie sicherlich nicht allen Meschen der "incumbents curse" ein Begriff ist. Und das ist ja eigentlich auch gut so.
Aber ich finde ein Mindestmaß an Anstand kann man schon mal zeigen. (Damit bist nicht Du gemeint akretschmer, jedenfalls denke ich das und auch hier im Forum keiner.)
Sicherlich wird in allen Foren darauf hingewiesen, dass Hausaufgaben oder ähnliches nicht gelöst werden und es auch Handbücher etc. gibt, und das wird bestimmt auch häufig ignoriert. Aber es soll auch Menschen geben, die in die Bücher schauen und es trotzdem nicht ausreichend verstehen. Ich für meinen Teil habe eigentlich nichts mit Informatik oder Datenbanken zu tun, muss nun aber seit ein paar Monaten, python, VBA, perl und Mysql nutzen und hab eigentlich so gar keine Ahnung davon. Bekomme es aber teilweise hin und freue mich am meisten wenn ich es selber schaffe. Wenn aber nicht, gehe ich in Foren und bitte um Hilfe. Aber erst wenn ich es allein wirklich nicht schaffe. Denn wenn ich es mit Hilfe aus dem Foren schaffe bin ich zwar froh, aber nicht ansatzweise so stolz, im Vergleich zum Alleingang mit testen und probieren.

Zweiter Beitrag im neuen Forum und dann so einer. Da mache ich mich sicher beliebt :(
 
Was für ein Fehler kommt denn? Grundsätzlich kann man sowohl 0 als auch NULL bei jedem numerischen Datentypen verwenden aber wenn der Wert nicht existiert sollte er natürlich auch mit NULL eingetragen werden.
 
Hey, ukulele.
Was für ein Fehler kommt denn? Grundsätzlich kann man sowohl 0 als auch NULL bei jedem numerischen Datentypen verwenden aber wenn der Wert nicht existiert sollte er natürlich auch mit NULL eingetragen werden.
Das hört sich doch schon mal gut an!

Ich hole mal ein wenig aus:
Das ist meine Tabelle (Die Fehler treten immer nur bei den Float-Spalten auf):
CREATE TABLE `journal_cr` (
`Abbrevation` varchar(45) NOT NULL,
`Name` varchar(255) DEFAULT NULL,
`Country` varchar(45) DEFAULT NULL,
`ISSN` varchar(9) DEFAULT NULL,
`TotalCites` int(11) DEFAULT NULL,
`ImpactFactor` float DEFAULT NULL,
`ImpactFactor_5Y` float DEFAULT NULL,
`ImmediacyIndex` float DEFAULT NULL,
`Articles` int(11) DEFAULT NULL,
`CitedHalfLife` float DEFAULT NULL,
`EigenfactorScore` float DEFAULT NULL,
`ArticleInfluenceScore` float DEFAULT NULL,
`Category` varchar(255) DEFAULT NULL,
`VHB` varchar(45) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Das sind jetzt die erste beiden Datensätze (insgesamt sind es 10000):
4OR-Q J OPER RES;4OR-Q J OPER RES;4OR-Q J OPER RES;1619-4500;364;0.918;1.181;0.294;17;6.2;0.00189;0.823
AAOHN J;AAOHN J;AAOHN J;0891-0162;399;0.608;0.623;;0;7.9;0.00060;0.164
aus einer CSV-Datei (UTF-8 w/O BOM)

Die csv habe ich mit:
LOAD DATA LOCAL INFILE 'C:/.../test1.csv'
into table journal_cr
fields terminated by ';'
in die MySQL DB geladen.

und es kommen diese Fehler (Auszug):
11619 row(s) affected, 64 warning(s):
1265 Data truncated for column 'ArticleInfluenceScore' at row 1
1265 Data truncated for column 'ImmediacyIndex' at row 2(hier wird fälschlicherweise die 0 gesetzt
1265 Data truncated for column 'ArticleInfluenceScore' at row 2
1265 Data truncated for column 'ArticleInfluenceScore' at row 3
1265 Data truncated for column 'ArticleInfluenceScore' at row 4
1265 Data truncated for column 'ArticleInfluenceScore' at row 5
1265 Data truncated for column 'ArticleInfluenceScore' at row 6
ich weiß nicht was für Fehler bei der letzten Spalte immer auftreten, aber die Daten werden eigentlich richtig geladen


VG
kid
 
Also deine Tabelle hat 14 Spalten, deine Datensätze haben jeweils 12 Werte, wobei der 2te Datensatz einmal keinen Wert hat, also weder 0 noch NULL. Daher macht MySQL in seiner unendlichen Weisheit vermutlich eine 0 draus, NULL wäre vermutlich zu logisch.
 
Also deine Tabelle hat 14 Spalten, deine Datensätze haben jeweils 12 Werte.
Mist. Nein, die letzten beide Spalten haben ich gelöscht. also aus der Tabelle.
Richtig wäre:
CREATE TABLE `journal_cr` (
`Abbrevation` varchar(45) NOT NULL,
`Name` varchar(255) DEFAULT NULL,
`Country` varchar(45) DEFAULT NULL,
`ISSN` varchar(9) DEFAULT NULL,
`TotalCites` int(11) DEFAULT NULL,
`ImpactFactor` float DEFAULT NULL,
`ImpactFactor_5Y` float DEFAULT NULL,
`ImmediacyIndex` float DEFAULT NULL,
`Articles` int(11) DEFAULT NULL,
`CitedHalfLife` float DEFAULT NULL,
`EigenfactorScore` float DEFAULT NULL,
`ArticleInfluenceScore` float DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Sorry.

wobei der 2te Datensatz einmal keinen Wert hat, also weder 0 noch NULL
Ich hatte jetzt gedacht 'kein Wert' wäre NULL? Und dass durch das DEFAULT NULL MySQL ein NULL setzt wenn kein Wert da ist.
Sollte ich denn die Input Daten ändern, damit aus dem "kein Wert" ein NULL wird.?
Ich könnte ja in der CSV das ',,' durch ',NULL,' ersetzen, aber das geht sicherlich auch nicht.

VG
 
;NULL; in einer Import-Datei sollte immer NULL in die Tabelle schreiben. ;0; ergibt natürlich 0. Was ;; ergibt weiß ich nicht aber in deinem Fall offensichtlich nicht NULL :)
 
Ich hab nun gerade händisch mit Notepad++ die ';;' ersetzt mit ';NULL;'.
Hier ist mir aufgefallen; dass ein Fehler auftritt wenn ich ';;;' habe.
Ausgangssituation(Beispiel):
1;;3;4;5;6;7;8;9
1;;;4;5;6;7;8;9
1;;;;5;6;7;8;9
1;;;;;6;7;8;9
1;;;;;;7;8;9
1;;;;;;;8;9
1;;;;;;;;9
1;;;;;;;;
Hier habe ich ';;' ersetzt mit ';NULL;'. Das kam raus:
1;NULL;3;4;5;6;7;8;9
1;NULL;;4;5;6;7;8;9
1;NULL;;NULL;5;6;7;8;9
1;NULL;;NULL;;6;7;8;9
1;NULL;;NULL;;NULL;7;8;9
1;NULL;;NULL;;NULL;;8;9
1;NULL;;NULL;;NULL;;NULL;9
1;NULL;;NULL;;NULL;;NULL;
D.h. wenn ein Semikolon gleichzeitig das erste und das zweite Semikolon von ';;' ist; wird es nur einmal behandelt.
Also entweder den Schritt des Ersetzens zweimal durchlaufen; oder rekursiv arbeiten:
erst: ';;;;;' durch ';NULL;NULL;NULL;NULL;' ersetzen.
dann: ';;;;' durch ';NULL;NULL;NULL;' ersetzen.
dann: ';;;' durch ';NULL;NULL;' ersetzen.
und dann: ';;' durch ';NULL;' ersetzen.
VG
 
Werbung:
Zurück
Oben