sql >> Databasteknik >  >> RDS >> Mysql

Välj aktuella månaders poster mysql från tidsstämpelkolumnen

UPPDATERA

Ett mycket bättre indexvänligt sätt att fråga efter dina data för ett antal datum

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);

Obs! Du tillämpar inte någon funktion på dina kolumndata, utan gör snarare alla nödvändiga beräkningar på höger sida av villkoren (som är konstanter och utvärderas endast en gång efter exekvering). På så sätt låter du MySQL dra nytta av index som du kan ha i timestampfield kolumn.

Ursprungligt svar:

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

Obs! Även om den här frågan ger de korrekta resultaten ogiltigförklarar den i praktiken korrekt användning av indexet/indexen som du kan ha i timestampfield kolumn (vilket betyder att MySQL kommer att tvingas utföra en fullskanning)

Här är SQLFiddle demo



  1. Grunderna för att hantera datafiler i SQL Server

  2. Tips för bättre databasdesign

  3. Tilldela samma parametervärde flera gånger i pdo execute

  4. Hur uppdaterar jag från en SELECT i SQL Server?