Ik wil graag in mijn tabel een datum zoeken. Alleen ik krijg het niet voor elkaar. Ik wil bijv. zoeken op 05-02-2016 maar als ik dat intik kom er niets, wel als ik 2016-02-05 doe.

Ik heb in de selectie van de table deze regel opgenomen:


<?php 

sql = "SELECT DATE_FORMAT(datum_vrk,'%d-%m-%Y') AS datum_vrk FROM verkoop WHERE datum_vrk LIKE '%$gestuurd%'";
?>


wat doe ik fout?
De notatie in MySQL is 2016-02-05 (YYYY-MM-DD). Dus je zult je datum die je invoert moeten omzetten naar deze Engelse variant.
Het is niet mogelijk om een alias te gebruiken in je WHERE, wat je wel kunt doen is de DATE_FORMAT functie uitvoeren in de WHILE clause zelf:


SELECT id FROM verkoop WHERE DATE_FORMAT(datum_vrk,'%d-%m-%Y') = '05-02-2016'


Of de datum omzetten naar het formaat zoals deze in de database wordt gebruikt voordat deze in de query wordt verwerkt.
En ik zou voor de optie van Thomas gaan, want zoeken op de output van een functie is een drama voor je performance. Er kan immers geen index gebruikt worden.
Het zoeken met een string- of datumfunctie in een WHERE-clausule heeft twee samenhangende: alle datums moeten voor de vergelijking worden omgezet en er kan geen index meer gebruikt worden. Ik zou de datum inderdaad ook omzetten in de ISO-notatie van MySQL, bijvoorbeeld zo:


<?php
$gestuurd = '5-2-2016';
$gestuurd = explode('-', $gestuurd);
$gestuurd = $gestuurd[2] . '-' . sprintf('%02d', $gestuurd[1]) . '-' . sprintf('%02d', $gestuurd[0]);

var_dump($gestuurd); // string(10) "2016-02-05"
?>


Door de sprintf() ben je dan meteen af van het verschil tussen 05 en 5.

Reageren