Probleem met datum en tijd zoeken in mysql
Ik maak gebruik van een bestaande database van iemand anders, die een kolom heeft voor datum en 1 voor tijd.
Beide kolommen staan op varchar(255).
Ik heb een pagina waarop ik een datetime picker heb op basis van bootstrap-datetimepicker heb staan en een knop.
De code die ik heb om deze te tonen is.:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<div class="input-append date form_datetime">
<label><center>Start Datum</center></label>
<input size="16" type="text" value="" name="datum1" readonly>
<span class="add-on"><i class="icon-th"></i></span>
</div>
<script type="text/javascript">
$(".form_datetime").datetimepicker({
format: "dd-m-yyyy - hh:ii:ss"
});
</script>
<label><center>Start Datum</center></label>
<input size="16" type="text" value="" name="datum1" readonly>
<span class="add-on"><i class="icon-th"></i></span>
</div>
<script type="text/javascript">
$(".form_datetime").datetimepicker({
format: "dd-m-yyyy - hh:ii:ss"
});
</script>
Als ik op de knop druk krijg ik mooi de gekozen datum te zien dmv deze code.:
Nu wil ik dus alle gegevens laten zien vanaf de gekozen datum.
de sql query die ik probeer is deze.:
Code (php)
1
$sql = "SELECT *, CONCAT(Datum,' - ',Tijd) AS DatumTijd FROM metingen where Datum > " .$_POST['datum1']." ORDER BY Id DESC";
Maar hij laat mij niks zien met bovenstaande regel.
Nu weet ben ik bang dat of dat stukje vanaf WHERE wel klop, aangezien ik die concat doe.
Het is de intensie dat kolom Datum en kolom Tijd samen worden gevoegd om daarop de gegevens te laten zien of dat ik de aangegeven datum van die datetime picker moet opsplitsen.
Ik heb even geen idee, graag hulp.
Nu kan je er ook niet mee rekenen en vergelijken, omdat je nu met strings zit te werken.
Je zult de datums als datums moeten gaan verwerken.
In de vergelijking rijg je een datum en een tijd aan elkaar met een minteken, hoe zijn de andere datums en tijden dan opgeslagen? Dit volgt in ieder geval geen enkele standaard voor zover ik weet.
Het idee is inderdaad dat je de datums opslaat als jaar-maand-dag uren:minuten:seconden omdat dan de lexicografische (alfabetische) volgorde (het zijn immers strings) de numerieke volgorde volgt en je dan wel op een zinnige manier datums kunt vergelijken met elkaar, zoals @Ward hierboven aanhaalt. Wanneer het format zich hiervoor leent kan dit prima: 2018-11-02 > 2018-11-12.
Niet ermee rekenen in SQL, lijkt mij?
Als er een kolomtype speciaal voor datums en tijden is is dat uiteraard beter om te gebruiken dan een VARCHAR kolom. Gebruik dus bij voorkeur DATE(TIME) kolommen voor datums.
Laten we het vervolgens eens over tijdzones hebben :p.
Ik zal eens kijken of ik niet die oude db, alsnog kan omgooien en die datum en tijd kolom kan omzetten naar de juiste indeling van date time , als het geen nadelige effecten heeft op de rest en dan kom ik hierop wel terug.