sql >> Database teknologi >  >> RDS >> Mysql

Vælg aktuelle måneders optegnelser mysql fra tidsstempelkolonnen

OPDATERING

En meget bedre indeksvenlig måde at forespørge på dine data for en række datoer

SELECT id, FROM_UNIXTIME(timestampfield) timestamp 
  FROM table1
 WHERE timestampfield >= UNIX_TIMESTAMP(LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH)
   AND timestampfield <  UNIX_TIMESTAMP(LAST_DAY(CURDATE()) + INTERVAL 1 DAY);

Bemærk: Du anvender ikke nogen funktion på dine kolonnedata, men udfører i stedet alle nødvendige beregninger på højre side af betingelserne (som er konstanter og kun evalueres én gang efter udførelse). På denne måde giver du MySQL mulighed for at drage fordel af indeks(er), som du måske har på timestampfield kolonne.

Oprindeligt svar:

SELECT id, FROM_UNIXTIME(timestampfield) timestamp 
  FROM table1
 WHERE MONTH(FROM_UNIXTIME(timestampfield)) = MONTH(CURDATE())
   AND YEAR(FROM_UNIXTIME(timestampfield)) = YEAR(CURDATE())

Bemærk: Selvom denne forespørgsel giver de korrekte resultater, ugyldiggør den effektivt den korrekte brug af indekset/indekserne, som du måtte have på timestampfield kolonne (hvilket betyder, at MySQL vil blive tvunget til at udføre en fuldscanning)

Her er SQLFiddle demo



  1. To tabeller med samme kolonner eller en tabel med yderligere kolonne?

  2. PostgreSQL-privilegier og sikkerhed - Låsning af det offentlige skema

  3. Hvornår skal du bruge TEXT i mysql i stedet for VARCHAR

  4. Hvorfor kan jeg ikke bruge et alias i en DELETE-sætning?