sql >> Databáze >  >> RDS >> Mysql

Laravel Výmluvné porovnání data z pole datetime

Laravel 4+ vám nabízí tyto metody:whereDay() , whereMonth() , whereYear() (#3946 ) a whereDate() (#6879 ).

Provádějí SQL DATE() pracovat pro vás a spravovat rozdíly SQLite.

Váš výsledek může být dosažen takto:

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

Další příklady naleznete v první zprávě #3946 a tento článek Laravel Daily .


Aktualizace: Ačkoli je výše uvedená metoda pohodlná, jak poznamenal Arth, je neefektivní na velkých souborech dat, protože DATE() Funkce SQL musí být aplikována na každý záznam, čímž se zahodí možný index.

Zde je několik způsobů, jak provést srovnání (přečtěte si prosím poznámky níže):

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

Poznámky:

  • 23:59:59 je v pořádku (prozatím) kvůli přesnosti na 1 sekundu, ale podívejte se na tento článek:23:59:59 není konec dne. Ne, opravdu!
  • Mějte na paměti případ „nulové datum“ („0000-00-00 00:00:00“). I když je třeba se těmto „nulovým datům“ vyhnout, jsou zdrojem mnoha problémů. V případě potřeby je lepší nastavit pole s hodnotou null.


  1. Složený primární klíč v django

  2. Jak vypsat řádky pro dotaz nebo zobrazit „žádné záznamy“ pomocí jediného dotazu

  3. Výsledkem tiskového dotazu je tabulka

  4. Oracle:jak seskupit podle rozsahu?