sql >> Database >  >> RDS >> Mysql

Laravel Welsprekende vergelijkingsdatum uit datetime-veld

Laravel 4+ biedt u deze methoden:whereDay() , whereMonth() , whereYear() (#3946 ) en whereDate() (#6879 ).

Ze doen de SQL DATE() voor u werken en de verschillen van SQLite beheren.

Uw resultaat kan als volgt worden bereikt:

->whereDate('date', '<=', '2014-07-10')

Zie voor meer voorbeelden het eerste bericht van #3946 en dit Laravel Daily-artikel .


Bijwerken: Hoewel de bovenstaande methode handig is, zoals opgemerkt door Arth, is deze inefficiënt voor grote datasets, omdat de DATE() De SQL-functie moet op elk record worden toegepast, waardoor de mogelijke index wordt weggegooid.

Hier zijn enkele manieren om de vergelijking te maken (maar lees de opmerkingen hieronder):

->where('date', '<=', '2014-07-10 23:59:59')

->where('date', '<', '2014-07-11')

// '2014-07-11'
$dayAfter = (new DateTime('2014-07-10'))->modify('+1 day')->format('Y-m-d');

->where('date', '<', $dayAfter)

Opmerkingen:

  • 23:59:59 is oké (voorlopig) vanwege de precisie van 1 seconde, maar bekijk dit artikel eens:23:59:59 is niet het einde van de dag. Nee, echt waar!
  • Houd rekening met het geval 'nul datum' ("0000-00-00 00:00:00"). Hoewel deze "nuldatums" vermeden moeten worden, zijn ze de bron van zoveel problemen. Maak het veld indien nodig beter nullable.


  1. Hoe een .Net-toepassing te schrijven die werkt met zowel SqlServer als Oracle (nu System.Data.OracleClient is verouderd)

  2. Converteer een MySQL-database van latijn naar UTF-8

  3. Aan de slag met GearHost voor MySQL-databaseontwikkeling

  4. AND-veld NOT IN(NULL) retourneert een lege set