Bernd: WHERE in einem Datum

Hallo,

ist es möglich ein WHERE bzw. ein AND auf ein Datum anzuwenden, aber nur auf das Jahr bezogen?

function Auswertung($mysqli, $filter=false) {
        
    $select = "SELECT id, code, titel, von, bis, status FROM grunddaten ";
        
    if ($filter == '2018') {
        $stmt = $mysqli->prepare($select . "WHERE status =2 AND von=? ORDER BY von ASC" );
        $stmt->bind_param("s", $filter);
    }
    elseif ($filter == '2019') {
        $stmt = $mysqli->prepare($select . "WHERE status =2 AND von=?  ORDER BY von ASC" );
        $stmt->bind_param("s", $filter);
    }
    else {
        $stmt = $mysqli->prepare($select . "WHERE status =2 ORDER BY von ASC" );
    }

    $stmt->execute();
    $stmt->bind_result($id, $code, $titel, $von, $bis, $status);
    $stmt->store_result();
        
    if($stmt->num_rows() >  0) {     
        while ($stmt->fetch()){
                
            $Auswertung[] = array( 
                    
                'id'     => $id, 
                'code'   => $code,
                'titel'  => $titel,
                'von'    => $von,
                'bis'    => $bis,
                'status' => $status
            );
        }
    return $Auswertung;
}
    

Im Feld von steht z.B. 2018-08-31 und ist vom Typ "date"

  1. Tach!

    ist es möglich ein WHERE bzw. ein AND auf ein Datum anzuwenden, aber nur auf das Jahr bezogen?

    Ja, MySQL hat Datums- und Uhrzeit-Funktionen, die nicht nur das Jahr aus einem Datum extrahieren können.

    dedlfix.

    1. Tach!

      ist es möglich ein WHERE bzw. ein AND auf ein Datum anzuwenden, aber nur auf das Jahr bezogen?

      Ja, MySQL hat Datums- und Uhrzeit-Funktionen, die nicht nur das Jahr aus einem Datum extrahieren können.

      Allerdings kann sich

      SELECT `foo`, `bar` from `tabelle` where YEAR(`datum`) = 2018;
      

      negativ auf das Laufzeitverhalten auswirken. Grund: Die Formel umfasst eine Tabellenspalte, die indexiert sein könnte, es muss aber ein Fulltable-Scan gemacht werden:

      Also ist das hier ggf. schneller:

      SELECT `foo`, `bar` from `tabelle` where `datum` BETWEEN "2018-01-01" AND "2018-12-31";
      
      1. Hallo,

        SELECT `foo`, `bar` from `tabelle` where `datum` BETWEEN "2018-01-01" AND "2018-12-31";
        

        auf die Idee bin ich gar nicht gekommen.