Zentralregierung: MYSQL WHERE DATUM >= date_sub(now(), interval 5 DAY) will nicht

Hallo,

sehe ich das richtig das bei der Angabe:
WHERE DATUM >= date_sub(now(), interval 5 DAY)
alle Daten angezigt werden sollen die heute + 5 Tage sind?

Danke

  1. Hallo,

    sehe ich das richtig das bei der Angabe:
    WHERE DATUM >= date_sub(now(), interval 5 DAY)
    alle Daten angezigt werden sollen die heute + 5 Tage sind?

    wenn ich Dich richtig verstehe, dann siehst Du das nicht richtig.
    Diese WHERE-Klausel beschränkt die Ergebnismenge auf die Datensätze, deren Werte in der Datumsspalte *nicht* älter als fünf Tage alt sind.

    |<---- 5 Tage ---->|
    ---------------------------------------> Zeit
                    ^                  ^
                    |                  |
                    |                 NOW()
      DATE_SUB(NOW(), INTERVAL 5 DAY)
                    |----------------------->
                     ab hier wird angezeigt

    Freundliche Grüße

    Vinzenz

    1. yo Vinz,

      Diese WHERE-Klausel beschränkt die Ergebnismenge auf die Datensätze, deren Werte in der Datumsspalte *nicht* älter als fünf Tage alt sind.

      ich bin aus der mysql doku nicht ganz schlau geworden, ob DATE_SUB sich nicht genauso verhält wie DATE_ADD, bzw. ob die richtung der zeitachse nicht alleine durch das vorzeichen gesteuert wird. leider habe ich hier auch kein mysql, um es selbst auszuprobieren. aber meine vermutung ist, dass:

      date_sub(now(), interval 5 DAY) = date_add(now(), interval 5 DAY)

      gilt.

      Ilja

      1. echo $begrüßung;

        ich bin aus der mysql doku nicht ganz schlau geworden, ob DATE_SUB sich nicht genauso verhält wie DATE_ADD, bzw. ob die richtung der zeitachse nicht alleine durch das vorzeichen gesteuert wird. leider habe ich hier auch kein mysql, um es selbst auszuprobieren. aber meine vermutung ist, dass:
        date_sub(now(), interval 5 DAY) = date_add(now(), interval 5 DAY)

        Es gibt in der Beschreibung zu DATE_ADD()/DATE_SUB() Beispiele, die zeigen, dass DATE_SUB() ein DATE_ADD() mit umgekehrtem Vorzeichen ist.

        Deutlicher (und meiner Meinung nach einfacher) wird die Syntax, wenn man statt DATE_ADD() und DATE_SUB() die ebenfalls dort angegebene Syntax

        date + INTERVAL expr unit
          date - INTERVAL expr unit

        nimmt.

        echo "$verabschiedung $name";

        1. yo,

          Deutlicher (und meiner Meinung nach einfacher) wird die Syntax, wenn man statt DATE_ADD() und DATE_SUB() die ebenfalls dort angegebene Syntax

          date + INTERVAL expr unit
            date - INTERVAL expr unit

          nimmt.

          das oder einfach nur DATE_ADD(), irgendwie ist das mit DATE_SUB() doppelt gemoppelt, wenn auch mit anderen vorzeichen.

          Ilja

  2. Moin

    Du brauchst etwas a`la

    WHERE TO_DAYS(DATUM) <= (TO_DAYS(CURRENT_DATE)+5) AND TO_DAYS(DATUM) >= TO_DAY(NOW())

    TO_DAY wandelt ein Datum in die Tagesanzahl um.

    Gruß Bobby

    --
    -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
    -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
    ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
  3. Hallo,

    sehe ich das richtig das bei der Angabe:
    WHERE DATUM >= date_sub(now(), interval 5 DAY)
    alle Daten angezigt werden sollen die heute + 5 Tage sind?

    wenn Du die Daten haben möchtest, die in die nächsten 5 Tage fallen, dann sieht dies auf der Zeitachse wie folgt aus:

    NOW()                      NOW() + INTERVAL 5 DAY (siehe [dedlfix])
      |                                  |
      |<------------ 5 Tage ------------>|
    ---------------------------------------> Zeit
      ^                                  ^
      |                                  |
      |                                  |
      |<-------------------------------->|
        nur *zwischen* diesen Zeitpunkten
        liegende Daten interessieren

    führt zu folgender WHERE-Klausel:

    WHERE datum [link:http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_between@title=BETWEEN] NOW() AND (NOW() + INTERVAL 5 DAY)

    Freundliche Grüße

    Vinzenz