Announcement

Collapse
No announcement yet.

Table Update

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Table Update

    Verzweifele an einem einfachen UPDATE
    Hab in einer temporären Tabelle (tbl) ein Feld namens datum. Ist DATE. Hab zwei weitere Felder anz und dos. Darin jeweils ein INTEGER.
    100 2 2022-01-01
    Mit einem UPDATE tbl SET datum=datum+INTERVAL (anz/dos) DAY
    soll datum um den Quotient aus anz und dos erhöht werden. Ich bekomme in datum nach dem Update immer NULL.
    Was ist da falsch?

    Danke und Grüße
    Norbert

  • #2
    Das Statement ist korrekt, sofern anz/dos sinnvolle Werte haben
    Mal an ein commit gedacht
    Christian

    Comment


    • #3
      Schnell wie immer! Danke!
      Scheint bei einer temp. Table anders zu sein. Bei normalen Tabellen geht es. Habs nach Stunden rumprobieren endlich gefunden. Es braucht einen Alias. So gehts:
      Code:
      update retTable A set datum=date_add(A.datum,interval A.anz/A.dos day);

      Comment


      • #4
        Lieber Christian,
        konntest den Fehler vielleicht nicht finden, weil ich Dich nicht darüber informiert habe (vergessen), dass das Statement in einer StoredProcedure läuft. Es lag wohl daran und nicht an der Temporary Table? Oder an beidem? Oder an unserem veralteten MySql 5.6?

        Comment


        • #5
          Weiß ich nicht, habe eine Testtabelle angelegt, da ging es
          Christian

          Comment


          • #6
            Originally posted by strzata View Post
            ..das Statement in einer StoredProcedure läuft. Es lag wohl daran und nicht an der Temporary Table? Oder an beidem? Oder an unserem veralteten MySql 5.6?
            Aliase, Stored Proc, .. das schiene mir eher Voodoo als Realität, selbst wenn es um mysql geht.
            Du hast gegenüber dem Ausgangs Post das Statement nicht nur um Aliase erweitert, Du hast auch eine andere Funktion verwendet.
            Für mich stellt sich das so dar, dass INTERVAL schlicht nur Ganzzahl akzeptiert (auch wenn ich dazu keine explizite Doku gefunden habe).
            Das würde bedeuten, dass implizit gerundet wird.
            Das würde wieder bedeuten, "es geht" liegt entweder daran, dass sich die neue Funktion anders verhält oder daran, dass Deine Versuche zufällig mal mit Ganzzahlergebnis (geht) oder Dezimalzahl (geht, nur etwas ungenau, bei <0.5 ohne sichtbaren Effekt)
            Außerdem verhält sich mySQL da eigentlich korrekt, wenn der Ausgangswert NULL ist. NULL ist halt nichts und wenn man was dazu addiert, ist das Ergebnis undefiniert, also NULL.

            Bedeutet, bei solchen Fragen bzw Fehlersuche allgemein sollte man auch auf die Daten achten, die dem Statement zugrunde liegen. Diese dann am besten ebenfalls posten. Besonders wenn man nur recht wage Vermutungen zur Ursache hat (Version, ...).

            Und nur am Rande, alles verhält sich wieder anders, wenn der Typ nicht Date ist.
            Da Date sowieso nur ganze Tage aufnimmt, wäre auch die Frage, was der Quotient bewirken soll.
            Gruß, defo

            Comment


            • #7
              Danke defo, dass Du Dich nochmal damit beschäftigst. UInsere Stammtabelle für die Verordnung sieht in etwa so aus:
              Biso Lich Tbl. 100 1 2021-10-05
              ASS 100 Tbl. 50 2 2021-10-05
              Atacand Tbl. 100 0,5 2021-10-05
              Am 05.10.21 wurden 100 Tbl. Biso verordnet (hier gibt es nur Ganzzahlen). Täglich werden 1 Tbl. eingenommen. Ich muss errechnen, wie lange (bzw. bis zu welchem Datum) der Patient damit reicht.
              Ich denke DATE_ADD und datum + INTERVAL macht keinen Unterschied.
              Habe aber inzwischen noch andere Fehler in meiner SP gefunden (z.B. mal retTable und an anderer Stelle rettable verwendet).
              Bin aber schon fast am Ziel ...

              Viele Grüße
              Norbert

              Comment


              • #8
                Nimmt meinen Post nicht korrekt an

                Zuletzt editiert von strzata; 09.04.2022, 18:37.

                Comment


                • #9
                  Samba ist ein Netzwerkprotokol. Das hat mit MySql nichts zu tun.
                  Es ist in jedem Fall schlechter Stil einen String mit Ziffern und Buchstaben irgendwie zu einer Berechnung zu nutzen ohne vorher alle Buchtaben zu filtern
                  select REGEXP_SUBSTR('aaa123aaa','\\d+')
                  ergibt 123
                  Christian

                  Comment


                  • #10
                    Hast mein Posting noch gelesen. Danach bin ich ständig hier rausgeflogen. Bestimmte Wörter darf hier nicht verwenden. Ich versuchs dann unten mal mit Grafik.
                    Samba ist ein Netzwerkprotokol. Das hat mit MySql nichts zu tun.
                    Wollte damit nur zum Ausdruck bringen, dass MySql auf einem Linux Netzwerkserver läuft.
                    Es ist in jedem Fall schlechter Stil
                    Hast ja recht. Aber die DB ist vor 30 Jahren eingerichtet worden. Und das zu ändern ... puh.

                    Hier nochmal mein missglücktes Posting:

                    Hänge noch an einem Problem fest. Könnt ihr nochmal helfen?
                    In meinem vorherigen Post hatte ich in der zweiten Spalte Ganzzahlen angegeben. Im Original steht dort aber z.B. 100 St. Ich habe das Statement


                    INSERT INTO return_table SELECT Casx(C7104 AS UNSyyyyy) FROM ...
                    (Die Grafik wird hier auch nicht dargestellt. Bitte x ersetzen mit t, y ersetzen mit igned. Darf die Wörter nicht schreiben, da kommt sofort ein Error)

                    Auf unserem SAMBA Server funktioniert das. Auf localhost jedoch nicht (1292 - Truncated incorrect INTEGER value: '100 St')
                    Ist der MySql Server auf SAMBA in der Konfig anders eingestellt als der localhost?
                    Folgendes läuft auf beiden:
                    Code:
                    INSERT INTO return_table SELECT C7104+0 FROM ...
                    Darf man das so verwenden?
                    Ansonsten werde ich mal Dein REGEXP probieren.
                    Danke für alles!

                    Comment


                    • #11
                      Kann man
                      https://www.w3schools.com/sql/sql_in...nto_select.asp
                      Christian

                      Comment


                      • #12
                        Das macht mich glücklich! Dann lass ich es mit dem REGEXP. Und damit bin ich auch dank eurer großartigen Hilfe durch. Ist eine lange SP geworden und hat mich fast eine Woche gekostet.
                        Danke vielmals und bleibt gesund!
                        Viele Grüße
                        Norbert

                        Comment

                        Working...
                        X