Zoeken met datum notatie

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Kees Mulder

Kees Mulder

05/02/2016 12:44:25
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php

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

[/CODE]

wat doe ik fout?
 
PHP hulp

PHP hulp

22/12/2024 12:38:02
 
- Ariën  -
Beheerder

- Ariën -

05/02/2016 12:47:59
Quote Anchor link
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.
 
Bo Ter Ham

Bo Ter Ham

05/02/2016 13:12:08
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT id FROM verkoop WHERE DATE_FORMAT(datum_vrk,'%d-%m-%Y') = '05-02-2016'
 
Thomas van den Heuvel

Thomas van den Heuvel

05/02/2016 13:17:16
Quote Anchor link
Of de datum omzetten naar het formaat zoals deze in de database wordt gebruikt voordat deze in de query wordt verwerkt.
 
Ben van Velzen

Ben van Velzen

05/02/2016 13:38:30
Quote Anchor link
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.
 
Ward van der Put
Moderator

Ward van der Put

05/02/2016 13:41:54
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.