Ankündigung

Einklappen
Keine Ankündigung bisher.

INSERT INTO MIT DateTime

Einklappen

Neue Werbung 2019

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

  • INSERT INTO MIT DateTime

    Hallo zusammen,

    ich importiere eine CSV Datei in eine Puffer Tabelle, von dieser möchte ich die Daten mit Formatierung erstmal in eine andere Tabelle überführen, ich bekomme da aber immer ein Fehler:

    [22007][1292] (conn=2573) Truncated incorrect datetime value: '2020/09/30 00:00:00+00'
    PHP-Code:
    DELETE FROM tbl_Corona_Daten;

    INSERT INTO tbl_Corona_Daten(
        `
    ObjectId`,
        `
    IdBundesland`,
        `
    Bundesland`,
        `
    Landkreis`,
        `
    Altersgruppe`,
        `
    Geschlecht`,
        `
    AnzahlFall`,
        `
    AnzahlTodesfall`,
        `
    Meldedatum`,
        `
    IdLandkreis`,
        `
    Datenstand`,
        `
    NeuerFall`,
        `
    NeuerTodesfall`,
        `
    Refdatum`,
        `
    NeuGenesen`,
        `
    AnzahlGenesen`,
        `
    IstErkrankungsbeginn`,
        `
    Altersgruppe2`
    )
    SELECT     `ObjectId`,
              `
    IdBundesland`,
              `
    Bundesland`,
              `
    Landkreis`,
              `
    Altersgruppe`,
              `
    Geschlecht`,
              `
    AnzahlFall`,
              `
    AnzahlTodesfall`,
              
    DATE_FORMAT(`Meldedatum`,GET_FORMAT(DATETIME,'ISO')) As Meldedatum,
              `
    IdLandkreis`,
              `
    Datenstand`,
              `
    NeuerFall`,
              `
    NeuerTodesfall`,
              
    DATE_FORMAT(`Refdatum`,GET_FORMAT(DATETIME,'ISO')) As Refdatum,
              `
    NeuGenesen`,
              `
    AnzahlGenesen`,
              `
    IstErkrankungsbeginn`,
              `
    Altersgruppe2`
    FROM RKI_COVID19 
    So sieht die Select Anweisung aus:
    PHP-Code:
    1,1,Schleswig-Holstein,SK Flensburg,A00-A04,M,1,0,2020-09-30 00:00:00,1001,"12.04.2021, 00:00 Uhr",0,-9,2020-09-30 00:00:00,0,1,0,Nicht übermittelt
    2
    ,1,Schleswig-Holstein,SK Flensburg,A00-A04,M,1,0,2020-10-29 00:00:00,1001,"12.04.2021, 00:00 Uhr",0,-9,2020-10-29 00:00:00,0,1,0,Nicht übermittelt 

    Das ist der inhalt aus der rohDatei Tabelle
    PHP-Code:
    1,1,Schleswig-Holstein,SK Flensburg,A00-A04,M,1,0,2020/09/30 00:00:00+00,1001,"12.04.2021, 00:00 Uhr",0,-9,2020/09/30 00:00:00+00,0,1,0,Nicht übermittelt
    2
    ,1,Schleswig-Holstein,SK Flensburg,A00-A04,M,1,0,2020/10/29 00:00:00+00,1001,"12.04.2021, 00:00 Uhr",0,-9,2020/10/29 00:00:00+00,0,1,0,Nicht übermittelt 
    Die Datenbank steht auf Datetime bei diesen beiden Feldern.

    An was kann das liegen?


    Danke schon mal.

    LG Matthias

    EDIT: Es ist eine MariaDB

  • #2
    Schau dir doch an was du für Funktionen verwendest:

    https://mariadb.com/kb/en/date_format/
    https://mariadb.com/kb/en/get_format/

    Macht ein Ausdruck wie "DATE_FORMAT(`Meldedatum`,GET_FORMAT(DATETIME, 'ISO '))" damit sinn?! Nein...

    Du brauchst hierfür https://mariadb.com/kb/en/str_to_date/ Als erster Parameter kommt die Spalten mit dem deutschen Datum, im zweiten Parameter beschreibst du das Format der Spalte entsprechend der Doku.

    Kommentar


    • #3
      Das verstehe ich dann nicht,

      warum kommt dann das richtige über DATE_FORMAT raus, in der SELECT Anweisung?
      Ich hatte mich da an die MYSQL Doku gehalten, da diese ja FAST gleich sind.

      Wenn ich jetzt zum Bsp.:
      PHP-Code:
      STR_TO_DATE(`Meldedatum`,'%Y-%m-%e %H:%i:%S') As Meldedatum1
      ergänze, steht in den ganzen Feldern null.

      Jedoch in den Feldern mit dem im eingangs Post gezeigten, Bsp steht das richtige.

      Ist für den Insert vielleicht noch was anderes zubeachten?

      *kopfkratz.

      Danke schön.

      Kommentar


      • #4
        Anleitung angeschaut? DATE_FORMAT erwartet ein Datum was Formatiert werden soll. Datum ist in dem Kontext ein für die Datenbank gültiges Datum. Mysql/MariaDB ist da sehr lax und lässt allen möglichen Müll durchgehen. Du gibst hier ein deutsches Datum rein. Das kann vorne und hinten nicht funktionieeren. Die Datenbank weiß nicht ob damit der 12. Apr. oder 4 Dez. gemeint ist.
        STR_TO_DATE wandelt ein String in ein Datum um. Wie das Datum in dem String aussieht muss du angegeben.

        Bei "12.04.2021, 00:00 Uhr" wäre das also '%d.%m.%Y, %H:%i' und damit bekommst du ein '2021-04-12 00:00:00' zurück. Das ist ein gültiges Datum was in Datetime/Date Spalten geschreiben werden kann, oder auch in DATE_FORMAT benutzt werden kann.


        Du kannst das auch testen:
        PHP-Code:
        SELECT STR_TO_DATE('12.04.2021, 00:00 Uhr','%d.%m.%Y, %H:%i'

        Kommentar


        • #5
          Jetzt weiss ich, wir reden aneinander vorbei, mir gehts gar nicht um deutsche Format

          ich meine das hier
          PHP-Code:
          2020/09/30 00:00:00+00 
          Das meckert er mir immer wieder vor.

          Kommentar


          • #6
            Macht nix, das Problem und die Lösung sind identisch.

            Code:
            SELECT STR_TO_DATE('2020/09/30 00:00:00+00','%Y/%m/%d %H:%i:%s')

            Kommentar


            • #7
              Sorry,

              da liegt was anderes im Argen,

              habe es jetzt so gemacht:

              PHP-Code:
              INSERT INTO tbl_Corona_Daten(
                  `
              ObjectId`,
                  `
              IdBundesland`,
                  `
              Bundesland`,
                  `
              Landkreis`,
                  `
              Altersgruppe`,
                  `
              Geschlecht`,
                  `
              AnzahlFall`,
                  `
              AnzahlTodesfall`,
                  `
              Meldedatum`,
                  `
              IdLandkreis`,
                  `
              Datenstand`,
                  `
              NeuerFall`,
                  `
              NeuerTodesfall`,
                  `
              Refdatum`,
                  `
              NeuGenesen`,
                  `
              AnzahlGenesen`,
                  `
              IstErkrankungsbeginn`,
                  `
              Altersgruppe2`
              )
              SELECT     `ObjectId`,
                        `
              IdBundesland`,
                        `
              Bundesland`,
                        `
              Landkreis`,
                        `
              Altersgruppe`,
                        `
              Geschlecht`,
                        `
              AnzahlFall`,
                        `
              AnzahlTodesfall`,
                        
              STR_TO_DATE(`Meldedatum`,'%Y/%m/%d %H:%i:%s') As Melddatum,
                        `
              IdLandkreis`,
                        
              STR_TO_DATE(`Datenstand`,'%d.%m.%Y, %H:%i') As Datenstand,
                        `
              NeuerFall`,
                        `
              NeuerTodesfall`,
                        
              STR_TO_DATE(`Refdatum`,'%Y/%m/%d %H:%i:%s') As Refdatum,

                        `
              NeuGenesen`,
                        `
              AnzahlGenesen`,
                        `
              IstErkrankungsbeginn`,
                        `
              Altersgruppe2`
              FROM RKI_COVID19
              LIMIT 10 
              Es kommt immer wieder der gleiche Fehler:
              PHP-Code:
              [22007][1292] (conn=11Truncated incorrect datetime value'2020/09/30 00:00:00+00' 
              PHP-Code:
              #1292 - Falscher datetime-Wert gekürzt: '2020/09/30 00:00:00+00' 
              PHP-Code:
              1,1,Schleswig-Holstein,SK Flensburg,A00-A04,M,1,0,2020-09-30 00:00:00,1001,2021-04-12 00:00:00,0,-9,2020-09-30 00:00:00,0,1,0,Nicht übermittelt
              2
              ,1,Schleswig-Holstein,SK Flensburg,A00-A04,M,1,0,2020-10-29 00:00:00,1001,2021-04-12 00:00:00,0,-9,2020-10-29 00:00:00,0,1,0,Nicht übermittelt 

              Kommentar


              • #8
                Bei Date-Spalten musst du noch ein DATE() drum rum setzen.
                Code:
                DATE(STR_TO_DATE(...))

                Kommentar


                • #9
                  Es ist der Hammer.... du glaubst es nicht....

                  Mal davon abgesehen, dass Date mir die Uhrzeit wegnimmt, es kommt immer noch der gleiche Fehler

                  PHP-Code:
                   Date(STR_TO_DATE(`Meldedatum`,'%Y/%m/%d %H:%i:%s')) As Melddatum
                  *haareausreiß

                  Kommentar


                  • #10
                    Gehe es doch mal Schritt für Schritt durch. Extrahiere dein Problem auf ein Minimum mit Testdaten und probiere es aus, das kannst du auch in der DB Konsole machen.

                    Kommentar


                    • #11
                      Probleme gibts. Ich war fest der Überzeugung STR_TO_DATE gibt NULL zurück wenn das Datum nicht zum Format passt. Man lernt nie aus... die +00 muss mit angegeben werden.

                      Code:
                      SELECT STR_TO_DATE('2020/09/30 00:00:00+00','%Y/%m/%d %H:%i:%s+00')
                      DATE() brauchst du nur wenn du das in eine DATE Spalte einfügen willst (DATE = nur Datum, DATETIME = Datum + Zeit)

                      Kommentar

                      Lädt...
                      X