Date notatie en MYSQL LIKE
yyyy-m-d
In de database staat de datum opgeslagen als yyyy-mm-dd.
Voorbeeld:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?
$datum = '2007-7-1'
SELECT *
FROM `backloading`
WHERE `aankomst` LIKE 'Amsterdam'
AND vertrekdatum LIKE '$datum'
?>
$datum = '2007-7-1'
SELECT *
FROM `backloading`
WHERE `aankomst` LIKE 'Amsterdam'
AND vertrekdatum LIKE '$datum'
?>
Notatie YYYY-M-D wordt zelfs met like niet gevonden, notatie yyyy-mm-dd werkt prima. Hoe kan ik een variabele $datum omzetten naar het yyyy-mm-dd formaat?
Gewijzigd op 01/01/1970 01:00:00 door Marco
De berekening 2007 minus 7 minus 1, zal 1999 opleveren. Er zullen weinig datums zijn die daarmee overeenkomen. Gebruik quotes om een datum-string aan te maken: '2007-07-01'
Verder snap ik niet wat je met LIKE wilt bereiken, het lijkt erop dat je de query langzamer wilt maken... Gebruik = voor een complete vergelijking, wanneer je LIKE zonder % gebruikt, ben je fout bezig.
Backticks ` mag je weggooien, die heb je helemaal nooit nodig in een query, ook niet als je geserveerde en/of onmogelijke namen wilt gebruiken voor tabellen en/of kolommen. Dan kies je betere namen.
Ik selecteer de datum m.b.v. een datepicker, die als output yyyy-m-d geeft, terwijl de database deze notatie hanteert yyyy-dd-mm. Sorry, ik was de quotes in de (voorbeeld) variabele vergeten.
Mijn vraag is dus: Hoe kan ik yyyy-m-d omzetten naar yyyy-dd-mm.
Like heb ik gebruikt omdat "= " niet werkt als er een nul onbreekt voor de desbetreffende dag of maand. Maar ook like bood hiertoe geen oplossing.
Gewijzigd op 01/01/1970 01:00:00 door Marco
browser != database
browser kent de database niet eens, heeft daar helemaal niks mee te maken.
Oplossing: zorg dat je met een stukje php-code een geldige datum aanmaakt, met voorloopnullen. LIKE is een lapmiddel, gaat problemen opleveren.
En nog wat, met jouw datumpicker kan ik prima een ongeldige datum selecteren, 31 februari 200045 is prima te selecteren! Denk jij dat het zin heeft om daar een query mee uit te gaan voeren? checkdate() is je beste vriend.
check: http://www.backloading.bussite.at/zoeken.php
Ik wil de .$calendar->Value(); datum omzetten naar een notatie met voorloopnullen.
Een smerige oplossing is kijken of de dag/maand onder 10 is, zoja, er een 0 voorzetten.
Het hele kalender-gebeuren is dus totaal offtopic.
En mijn vraag is dus: Hoe kan ik (serverside) de output van de kalender (volgens jou ongeacht het formaat) naar een geldig formaat voor de database omzetten, zodat de query 200% zeker een yyyy-mm-dd datumformaat bevat? Eventueel met checkddate wat je noemt of iets dergelijks..
- checkdate()
- met sprintf kun je voorloopnullen bijplaatsen
- zet de boel weer in de juiste volgorde: yyyy-mm-dd
De code mag je zelf gaan opstellen.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
Thanks Frank!
@Bart: Leuke code, maar deze controleert niet op geldigheid. En dat is nu net een zwak punt van MySQL, die ziet een broodje Aap nog aan voor een datum.
je kunt php toch laten controleren of het een geldige datum is, dat zit er nu niet in maar dat kan vast wel.
Dat was al gezegd; checkdate ()