Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. SQL auslesen und JSON erstellen

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    SQL auslesen und JSON erstellen

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      Stefan_NK last edited by

      Hallo Leute,

      ich habe es nun endlich geschafft, mittels Blockly eine SQL zu befüllen und wieder auszulesen.
      Die Testtabelle sieht wie folgt aus:
      Tabelle.jpg
      Datum= Datentyp date
      Zeit=Datentyp time
      km... =Datentyp int.

      Zu meinem Problem:
      Ich lese die Tabelle mittels Blockly aus. blockly.jpg

      <block xmlns="https://developers.google.com/blockly/xml" type="convert_object2json" id="YE=Q8?Z?3wIHm4;Nf+p_" x="297" y="117">
        <field name="PRETTIFY">TRUE</field>
        <value name="VALUE">
          <block type="variables_get" id="P!]-f.8Q#:Osu%xF9gO[">
            <field name="VAR" id="CgfJo8VRSg%C3jf0z5Fh">result_objekt</field>
          </block>
        </value>
      </block>
      

      und erhalte im JSON einen Timestamp anstatt dem Datum. Das JSON wird in einen Datpunkt vom Typ JSON geschrieben.

      [
        {
          "ID": 1,
          "Datum": "2023-01-14T23:00:00.000Z",
          "Zeit": "12:53:00",
          "kmStart": 300,
          "kmEnde": 500
        },
        {
          "ID": 2,
          "Datum": "2023-01-14T23:00:00.000Z",
          "Zeit": "14:53:00",
          "kmStart": 500,
          "kmEnde": 550
        },
        {
          "ID": 3,
          "Datum": "2023-01-14T23:00:00.000Z",
          "Zeit": "14:53:00",
          "kmStart": 500,
          "kmEnde": 550
        },
        {
          "ID": 4,
          "Datum": "2023-01-15T23:00:00.000Z",
          "Zeit": "15:16:00",
          "kmStart": 500,
          "kmEnde": 550
        },
        {
          "ID": 5,
          "Datum": "2023-01-15T23:00:00.000Z",
          "Zeit": "15:16:00",
          "kmStart": 500,
          "kmEnde": 550
        }
      ]
      

      In der VIS gelingt es mir auch nicht mit vis.inventwo - JSON das Datum bzw. die Uhrzeit zu formatieren.
      Gibt es eine Möglichkeit die Daten im JSON zu formatieren?

      LG Stefan

      S 1 Reply Last reply Reply Quote 1
      • S
        Stefan_NK @Stefan_NK last edited by

        @stefan_nk
        Habe jetzt noch das SQL angepasst. Ist zwar aufwändig aber es funktioniert. Keine Ahnung ob es richtig bzw. die beste Lösung ist 😊

        SELECT DATE_FORMAT(Datum, "%d %m %Y") Datum, TIME_FORMAT(Zeit, "%h:%i") Zeit, kmStart, kmEnde FROM iobroker.stefan_test; 
        
        OliverIO 1 Reply Last reply Reply Quote 0
        • OliverIO
          OliverIO @Stefan_NK last edited by

          @stefan_nk
          Das ist die bessere Lösung.
          Datum formatieren in JavaScript ist nicht so optimal

          1 Reply Last reply Reply Quote 1
          • S
            Stefan_NK last edited by

            Hallo, ich bin jetzt schon um einiges weiter, habe aber dennoch eine Frage zum SQL:

            In der Datenbank ist das Datum im Format yyyy-mm-dd als Datentyp DATE gespeichert.

            Das SQL liefert mir so das korrekte Ergebnis und richtig sortiert.

            select
            ProtTag,
            TIME_FORMAT(ZeitStart, "%H:%i") ZeitStart, 
            TIME_FORMAT(ZeitEnde, "%H:%i") ZeitEnde
            FROM iobroker.mustang ORDER BY ProtTag DESC, ZeitStart DESC;
            


            2023-02-03 12_02_06-Window.png

            Wenn ich jetzt aber das Datum im SQL formatiere stimmt die Sortierreihenfolge nicht (mir ist schon klar warum)

            select
            DATE_FORMAT(ProtTag, "%d.%m.%Y") ProtTag,
            TIME_FORMAT(ZeitStart, "%H:%i") ZeitStart, 
            TIME_FORMAT(ZeitEnde, "%H:%i") ZeitEnde
            FROM iobroker.mustang ORDER BY ProtTag DESC, ZeitStart DESC;
            


            2023-02-03 12_04_09-Window.png

            Kann mir jemand von Euch bitte weiterhelfen, wie ich das machen kann, dass ohne Formatierung sortiert wird und die Darstellung aber formatiert wird?

            S 1 Reply Last reply Reply Quote 0
            • S
              Stefan_NK @Stefan_NK last edited by

              @stefan_nk sagte in SQL auslesen und JSON erstellen:

              select
              ok, ich habs mit "herumspielen" hinbekommen 😇 😂
              Falls es wer braucht oder eine "elegantere" Lösung kennt:

              select
              DATE_FORMAT(ProtTag, "%d.%m.%Y") ProtTag1,
              TIME_FORMAT(ZeitStart, "%H:%i") ZeitStart, 
              TIME_FORMAT(ZeitEnde, "%H:%i") ZeitEnde
              FROM iobroker.mustang ORDER BY ProtTag DESC, ZeitStart DESC;
              
              OliverIO 1 Reply Last reply Reply Quote 0
              • OliverIO
                OliverIO @Stefan_NK last edited by

                @stefan_nk

                hm, du findest, das bei d m y das dann richtig sortiert ist?
                wenn dann müsste es andersrum lauten y m d

                nach einer sortierung müsste es dann so aussehen
                wenn du formatierst, dann ist das für die db ein normaler string, der genauso sortiert wird.

                01.01.2023
                01.02.2023
                02.01.2023
                ...

                ich weiß jetzt nicht was für eine DB du genau verwendest, aber
                wenn in Feld Datum das Datum in einem für die DB verständlichen Format steht, ich glaube du hast geschrieben Datum hat den Typ Date, dann mach hinten einfach order by datum

                Die verwendeten Felder müssen nicht alle in der SELECT Klausel stehen. Wichtig ist das alle Felder über die FROM-Auswahl erreichbar sind bzw. unterschieden werden kann.

                Was mir noch aufgefallen ist:

                select
                DATE_FORMAT(ProtTag, "%d.%m.%Y") ProtTag1,
                TIME_FORMAT(ZeitStart, "%H:%i") ZeitStart,
                

                bspw ProtTag1 ist ja der Feldname der für diese Spalte verwendet werden soll. Im Standard SQL wird das mit AS benannt
                also

                SELECT
                DATE_FORMAT(ProtTag, "%d.%m.%Y") AS ProtTag1,
                TIME_FORMAT(ZeitStart, "%H:%i") AS ZeitStart,
                

                zur besseren Lesbarkeit werden alle DB-Befehle und Funktionen Groß geschrieben
                https://www.w3schools.com/mysql/mysql_alias.asp

                1 Reply Last reply Reply Quote 0
                • First post
                  Last post

                Support us

                ioBroker
                Community Adapters
                Donate

                996
                Online

                31.7k
                Users

                79.6k
                Topics

                1.3m
                Posts

                2
                6
                372
                Loading More Posts
                • Oldest to Newest
                • Newest to Oldest
                • Most Votes
                Reply
                • Reply as topic
                Log in to reply
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                The ioBroker Community 2014-2023
                logo