Announcement

Collapse
No announcement yet.

select week("2018-01-06") - Fehler in MySQL?

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

  • select week("2018-01-06") - Fehler in MySQL?

    Hallo,

    Der MySQL Befehl select week("2018-01-06") liefert als Ergebnis 0. Ich habe mal ein paar Tage aus 2018 überprüft, immer erhalte ich ein um 1 zu niedriges Ergebnis. In 2019 scheint sich das Spiel fortzusetzen. Ist das Problem bekannt, gibt es eine Abhilfe?

    Danke - Günther
    Günther

  • #2
    Du hast den mode-parameter beachtet?

    https://dev.mysql.com/doc/refman/5.5...#function_week

    https://www.w3resource.com/mysql/dat...k-function.php
    Christian

    Comment


    • #3
      Der Mode-Parameter definiert doch nur, an welchem Wochentag die Woche beginnt. Sonntag oder Montag ist in unserem Fall vollkommen irrelevant.
      Das Problem lässt sich bei jedem beliebigen Tag in 2018 nachvollziehen. Für die Folgejahre hab ich keinen Kalender zum Vergleich. Und 2017 funktioniert einwandfrei.

      PHP-Code (von Falk Prüfer):
      Code:
          public static function getDataOrder($pKID, &$pResultRecord)
          {
              $db = appDB::getInstance();
      
              return $db->select(
                  'SELECT `No`, Bezeichnung, Anzahl, WEEK(`Date`) as w, YEAR(`Date`) as j
                      FROM navek
                      WHERE No = ?
                      ORDER BY `Date`',
                  $pResultRecord, [
                      $db->createParam((string) $pKID),
                  ],
                  appDB::STMT_OPTION_PERSISTENT
              );
          }
      und dann etwas später in einer anderen Datei:
      Code:
                  <?php if ($this->resultTabelle->w == 0) : ?>
                  <td class="count"><?php echo appLang::_('t_offen'); ?></td>
                  <?php else : ?>
                  <td class="date"><?php echo appOutput::htmlentities($this->resultTabelle->w); ?>&nbsp;/&nbsp;<?php echo appOutput::htmlentities($this->resultTabelle->j); ?></td>
                  <?php endif; ?>
      Ok, ich könnte jetzt eine Abfrage einbauen ob das Jahr größer 2017 ist und dann bei w einfach 1 hinzu addieren. Aber das sehe ich als Notbehelf.
      Günther

      Comment


      • #4
        hmmmm, es steuert auch den Range der Rückgabe

        The two-argument form of WEEK() enables you to specify whether the week starts on Sunday or Monday and whether the return value should be in the range from 0 to 53 or from 1 to 53.


        Christian

        Comment


        • #5
          Ok, hab ich auch dann gelesen. Aber wie erfahre ich welchen Mode ich angeben muß, und wie baue ich das in die MySQL Abfrage ein?
          Entschuldigung, die eigentliche mySQL Abfrage ist nicht von Falk, die wurde von uns vorgegeben.
          Günther

          Comment


          • #6
            https://stackoverflow.com/questions/...ct-week-number

            https://coderwall.com/p/vdbcyw/iso-8...date-functions

            da sind 2 Lösungen drin

            mit der Suche

            https://www.google.dk/search?q=mysql...FoOjwAKqw7GADw

            findet man weitere Ergebnisse
            Christian

            Comment


            • #7
              Welche Definition von Kalenderwoche willst du den genau
              Unsere übliche ISO-Woche entspricht Mode 3.

              Anstatt
              WEEK(`Date`)
              also eher
              WEEK(`Date`, 3)

              Comment


              • #8
                Also einfach nur weekofyear statt week.

                Super. Danke für die schnelle Hilfe.
                Günther

                Comment


                • #9
                  @Ralf,ob die Woche mit Sonntag oder Montag beginnt ist irrelevant. Wir haben keine Sonntage in der Datenbank.
                  Günther

                  Comment


                  • #10
                    ok, ich nehme dann WEEK(`Date`, 3)
                    Günther

                    Comment


                    • #11
                      Aus der Doku

                      WEEKOFYEAR(date)
                      Returns the calendar week of the date as a number in the range from 1 to 53. WEEKOFYEAR() is a compatibility function that is equivalent to WEEK(date,3).
                      Die Defintion von erster Woche eines Jahres ist "es müssen mindestens 4 Tage dieser Woche im neuen Jahr liegen". Natürlich ist dann wichtig mit welchem Wochentag in der gewünschten Kultur die Woche anfängt.

                      Du kannst ja mal das Verhalten von Mode 3 und Mode 6 vergleichen. Die Unterscheiden sich nur darin ob Die Woche Sonntags oder Montags beginnt.
                      http://sqlfiddle.com/#!9/f52524/1/0

                      Comment

                      Working...
                      X