Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Datumsumwandlung

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Datumsumwandlung

    Hallo,
    ich habe einen Auto-Import geschrieben, der mir CSV-Dateien in meine Mysql Datenbank kopiert. Allerdings ist das Datum anders formatiert und er zeigt mir ein meiner Datenbank immer nur 0000-00-00 00:00:00 an.
    Er hat also in der Datenbank YYYY-MM-DD hh:mm:ss und in meiner CSV-Datei hab ich DD.MM.YYYY hh:mm.

    Ich habe jetzt versucht in mein "LOAD DATA LOCAL INFILE..." ein STR_TO_DATE einzubauen, allerdings bleibt das Ergebnis unverändert. Hab ich hier einen Fehler drinnen in der Query oder muss ich das Problem anders angehen?

    PHP-Code:
    mysql_query('LOAD DATA LOCAL INFILE "import.csv" INTO TABLE import FIELDS TERMINATED BY ";" LINES TERMINATED BY "\\r\\n" SET Uhrzeit = STR_TO_DATE(Uhrzeit,"%D.%M.%Y %k:%i");') or die('Error loading data file.<br>' mysql_error()); 

  • #2
    Ob das mit LOAD DATA INFILE so funktioniert weiß ich nicht. Vermute auch ein Fehler in den Formatangaben. Probier doch erstmal mit einem Testtool eine SQL a.la.
    Code:
    SELECT STR_TO_DATE('01.05.2013 15:39','%d.%m.%Y %H:%i');
    mit deinen Datumsstring. Da sollte dann so was wie
    2013-05-01 15:39:00
    geliefert werden. Mit "%D.%M.%Y %k:%i" als Format kommt bei mir Null raus.

    Kommentar


    • #3
      Mit dem Select wie du es geschrieben hast liefert er ein Ergebnis (meins war also falsch).
      Ich habe es jetzt mal so mit LOAD DATA INFILE probiert, er schreibt aber trotzdem 0000-00-00 00:00:00.

      Wie wäre es denn am geschicktesten die Daten umzuwandeln? Ich brauche Sie aber auf jeden Fall als Datumsfeld da ich damit vergleichen muss.

      Kommentar


      • #4
        Wie sieht denn Deine CSV aus? Häng mal einen Teil (ein paar Zeilen) hier an.
        PHP Entwickler aus Berlin

        Kommentar


        • #5
          Code:
          Messen_h;DevNo;Main-ID;Cont.-ID;Time;Sub_1;Res_1;Unit_1;Perc_1;Sub_2;Res_2;Unit_2;Perc_2;Sub_3;Res_3;Unit_3;Perc_3;Sub_4;Res_4;Unit_4;Perc_4;Sub_5;Res_5;Unit_5;Perc_5;Sub_6;Res_6;Unit_6;Perc_6;Sub_7;Res_7;Unit_7;Perc_7;Sub_8;Res_8;Unit_8;Perc_8;Sub_9;Res_9;Unit_9;Perc_9;Sub_10;Res_10;Unit_10;Perc_10;Sub_11;Res_11;Unit_11;Perc_11;Sub_12;Res_12;Unit_12;Perc_12;Sub_13;Res_13;Unit_13;Perc_13;Sub_14;Res_14;Unit_14;Perc_14;Sub_15;Res_15;Unit_15;Perc_15;Sub_16;Res_16;Unit_16;Perc_16;Sub_17;Res_17;Unit_17;Perc_17;Sub_18;Res_18;Unit_18;Perc_18;Sub_19;Res_19;Unit_19;Perc_19;Sub_20;Res_20;Unit_20;Perc_20;Sub_21;Res_21;Unit_21;Perc_21;Sub_22;Res_22;Unit_22;Perc_22;Sub_23;Res_23;Unit_23;Perc_23;Sub_24;Res_24;Unit_24;Perc_24;Sub_25;Res_25;Unit_25;Perc_25;Sub_26;Res_26;Unit_26;Perc_26;Sub_27;Res_27;Unit_27;Perc_27;Sub_28;Res_28;Unit_28;Perc_28;Sub_29;Res_29;Unit_29;Perc_29;Sub_30;Res_30;Unit_30;Perc_30;Sub_31;Res_31;Unit_31;Perc_31;Sub_32;Res_32;Unit_32;Perc_32;Sub_33;Res_33;Unit_33;Perc_33;Sub_34;Res_34;Unit_34;Perc_34;Sub_35;Res_35;Unit_35;Perc_35;Sub_36;Res_36;Unit_36;Perc_36;Sub_37;Res_37;Unit_37;Perc_37;Sub_38;Res_38;Unit_38;Perc_38;Sub_39;Res_39;Unit_39;Perc_39;Sub_40;Res_40;Unit_40;Perc_40;Sub_41;Res_41;Unit_41;Perc_41;Sub_42;Res_42;Unit_42;Perc_42;Sub_43;Res_43;Unit_43;Perc_43;Sub_44;Res_44;Unit_44;Perc_44;Sub_45;Res_45;Unit_45;Perc_45;Sub_46;Res_46;Unit_46;Perc_46;Sub_47;Res_47;Unit_47;Perc_47;Sub_48;Res_48;Unit_48;Perc_48;Sub_49;Res_49;Unit_49;Perc_49;Sub_50;Res_50;Unit_50;Perc_50;Sub_51;Res_51;Unit_51;Perc_51;Sub_52;Res_52;Unit_52;Perc_52;Sub_53;Res_53;Unit_53;Perc_53;Sub_54;Res_54;Unit_54;Perc_54;Sub_55;Res_55;Unit_55;Perc_55;Sub_56;Res_56;Unit_56;Perc_56;Sub_57;Res_57;Unit_57;Perc_57;Sub_58;Res_58;Unit_58;Perc_58;Sub_59;Res_59;Unit_59;Perc_59;Sub_60;Res_60;Unit_60;Perc_60;Sub_61;Res_61;Unit_61;Perc_61;Sub_62;Res_62;Unit_62;Perc_62;Sub_63;Res_63;Unit_63;Perc_63;Sub_64;Res_64;Unit_64;Perc_64;Sub_65;Res_65;Unit_65;Perc_65;Sub_66;Res_66;Unit_66;Perc_66;Sub_67;Res_67;Unit_67;Perc_67;Sub_68;Res_68;Unit_68;Perc_68;Sub_69;Res_69;Unit_69;Perc_69;Sub_70;Res_70;Unit_70;Perc_70;Sub_71;Res_71;Unit_71;Perc_71;Sub_72;Res_72;Unit_72;Perc_72;Sub_73;Res_73;Unit_73;Perc_73;Sub_74;Res_74;Unit_74;Perc_74;Sub_75;Res_75;Unit_75;Perc_75;Sub_76;Res_76;Unit_76;Perc_76;Sub_77;Res_77;Unit_77;Perc_77;Sub_78;Res_78;Unit_78;Perc_78;Sub_79;Res_79;Unit_79;Perc_79;Sub_80;Res_80;Unit_80;Perc_80;Sub_81;Res_81;Unit_81;Perc_81;Sub_82;Res_82;Unit_82;Perc_82;Sub_83;Res_83;Unit_83;Perc_83;Sub_84;Res_84;Unit_84;Perc_84;Sub_85;Res_85;Unit_85;Perc_85;Sub_86;Res_86;Unit_86;Perc_86;Sub_87;Res_87;Unit_87;Perc_87;Sub_88;Res_88;Unit_88;Perc_88;Sub_89;Res_89;Unit_89;Perc_89;Sub_90;Res_90;Unit_90;Perc_90;Sub_91;Res_91;Unit_91;Perc_91;Sub_92;Res_92;Unit_92;Perc_92;Sub_93;Res_93;Unit_93;Perc_93;Sub_94;Res_94;Unit_94;Perc_94;Sub_95;Res_95;Unit_95;Perc_95;Sub_96;Res_96;Unit_96;Perc_96;Sub_97;Res_97;Unit_97;Perc_97;Sub_98;Res_98;Unit_98;Perc_98;Sub_99;Res_99;Unit_99;Perc_99;Sub_100;Res_100;Unit_100;Perc_100;Sub_101;Res_101;Unit_101;Perc_101
          Messen;IK0111.14001;xxxxxxxx;UACU 5099681;13.06.14 07:58:05;Dibromoethane;0.000;ppm;0;Methylbromide;0.000;ppm;0;Carbon_monoxide;0.000;ppm;0;Chloropicrin;0.000;ppm;0;Benzene;0.000;ppm;0;Dichloropropene;0.000;ppm;0;Xylene;0.000;ppm;0;Ammonia;0.000;ppm;0;Phosphine;0.000;ppm;0;Sulfuryl_fluor;0.000;ppm;0;Carbon_dioxide;0.000;ppm;0;Formaldehyde;0.000;ppm;0;Hydrog_cyanide;0.000;ppm;0;Styrene;0.000;ppm;0;Toluene;0.000;ppm;0;Dichloroethane;0.000;ppm;0

          Kommentar


          • #6
            Dieses Schema
            LOAD DATA INFILE 'file.txt'
            INTO TABLE t1
            (column1, @var1)
            SET column2 = @var1/100;
            steht in der MySQL-Doku . Hab damit aber noch nicht gearbeitet.

            Ein "import FIELDS" kenn ich nicht.
            Dann sehe ich noch eine Sekundenangabe in deinem Beispiel, das Format muß noch angepasst werden.

            Kommentar


            • #7
              Zitat von jspit Beitrag anzeigen
              Dann sehe ich noch eine Sekundenangabe in deinem Beispiel.
              ... und eine zweistellige Jahresangabe.

              Kommentar


              • #8
                Stimmt. Oh, ein Mod...

                Kommentar


                • #9
                  Wie ist denn das Zeichen für ein 2 stelliges Jahr?

                  EDIT: Habs gefunden (y)

                  Kommentar


                  • #10
                    Wenn ich das "y" benutze und einfach mal ein Select mache gibt er mir NULL aus.
                    Wenn ich das "Y" benutze gibt er mir den Datensatz aus....

                    Wie kann das sein trotz das ich ein 2 stelliges Jahr habe?

                    Kommentar


                    • #11
                      Zitat von jspit Beitrag anzeigen
                      Stimmt. Oh, ein Mod...

                      Kommentar


                      • #12
                        Zitat von Thomas C Beitrag anzeigen
                        Wenn ich das "y" benutze und einfach mal ein Select mache gibt er mir NULL aus.
                        Wenn ich das "Y" benutze gibt er mir den Datensatz aus....

                        Wie kann das sein trotz das ich ein 2 stelliges Jahr habe?
                        Wie sieht denn dein aktueller Stand aus?

                        Kommentar


                        • #13
                          Mein aktueller Stand ist immer noch wie am Anfang, wenn ich den Import laufen lasse schreibt er mir in die Spalte 0000-00-00 00:00:00.
                          Ich hab es jetzt mal so probiert wie ich es in der MySql Doku verstanden habe:
                          PHP-Code:
                          mysql_query('LOAD DATA LOCAL INFILE "import.csv" INTO TABLE import FIELDS TERMINATED BY ";" LINES TERMINATED BY "\\r\\n" (Messen, Gerätenummer, Beschreibung, Containernummer, @Uhrzeit, Stoff1, Menge1, Einheit1, Prozent1, Stoff2, Menge2, Einheit2, Prozent2, Stoff3, Menge3, Einheit3, Prozent3, Stoff4, Menge4, Einheit4, Prozent4, Stoff5, Menge5, Einheit5, Prozent5, Stoff6, Menge6, Einheit6, Prozent6, Stoff7, Menge7, Einheit7, Prozent7, Stoff8, Menge8, Einheit8, Prozent8, Stoff9, Menge9, Einheit9, Prozent9, Stoff10, Menge10, Einheit10, Prozent10, Stoff11, Menge11, Einheit11, Prozent11, Stoff12, Menge12, Einheit12, Prozent12, Stoff13, Menge13, Einheit13, Prozent13, Stoff14, Menge14, Einheit14, Prozent14, Stoff15, Menge15, Einheit15, Prozent15, Stoff16, Menge16, Einheit16, Prozent16) Uhrzeit = STR_TO_DATE(@Uhrzeit,"%d.%m.%y %H:%i");'); 

                          Kommentar


                          • #14
                            Ich seh da mehrere Fehler in deiner SQL:
                            - SET vor Uhrzeit fehlt
                            - ein "import FIELDS" kenn ich nicht und dies wirft bei mir auch einen Fehler

                            Die mysql* Funktionen sind veraltet. Aber darauf wurdest du bestimmt schon hingewiesen.

                            Edit: Sonst funktioniert das so im Grundsatz. Hab es an einem Minimalbeispiel (PDO) getestet.

                            Kommentar


                            • #15
                              Ich hab meinen Fehler gefunden...
                              Ich hatte die CSV-Datei mit Excel bearbeitet wodurch er mir die Formatierung des Datums geändert hatte. Es kam in manchen Dateien zu vierstelligen und in manchen zu zweistelligen Jahresangaben und in manchen Dateien waren Sekunden, in anderen wiederum nicht.

                              import Fields ist kein Befehl! import ist der Tabellenname und das FIELDS ist für FIELDS TERMINATED BY....

                              Danke für die Hilfe!

                              Mit freundlichen Grüßen
                              Thomas C

                              Kommentar

                              Lädt...
                              X