Probleem met datum en tijd zoeken in mysql

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pascal Schuffelers

Pascal Schuffelers

31/10/2018 14:33:37
Quote Anchor link
Ik zit met het volgende probleem, wat ik al eens in een andere post had aangeven en kom dit helaas ook hier weer tegen.
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)
PHP script in nieuw venster Selecteer het PHP script
1
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>


Als ik op de knop druk krijg ik mooi de gekozen datum te zien dmv deze code.:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
if (isset($_POST["mybutton"]))
   {
       echo "Begin datum.: ".$_POST["datum1"]."<br>";
     }


Nu wil ik dus alle gegevens laten zien vanaf de gekozen datum.
de sql query die ik probeer is deze.:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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.
 
PHP hulp

PHP hulp

22/12/2024 18:46:05
 
- Ariën  -
Beheerder

- Ariën -

31/10/2018 14:50:09
Quote Anchor link
...maar waarom geen DATETIME type op je veld?
Nu kan je er ook niet mee rekenen en vergelijken, omdat je nu met strings zit te werken.
 
Ward van der Put
Moderator

Ward van der Put

31/10/2018 14:57:43
Quote Anchor link
De clausule WHERE Datum > ... werkt niet goed omdat Datum een VARCHAR is voor tekst. Bij een stringvergelijking geldt bijvoorbeeld 2-11-2018 > 12-11-2018 omdat 2 als string groter dan 1 is.

Je zult de datums als datums moeten gaan verwerken.
 
Thomas van den Heuvel

Thomas van den Heuvel

31/10/2018 16:24:56
Quote Anchor link
... maar hoe ziet het format er op dit moment uit in je database? Nog even los van het kolomtype.

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.
 
- Ariën  -
Beheerder

- Ariën -

31/10/2018 16:32:58
Quote Anchor link
@Thomas: Maar dan kan je enkel vergelijkingsoperaties doen.
Niet ermee rekenen in SQL, lijkt mij?
 
Thomas van den Heuvel

Thomas van den Heuvel

01/11/2018 03:12:23
Quote Anchor link
Het enige verschil is volgens mij dat DATE(TIME) sneller werkt omdat het efficiënter in het geheugen wordt opgeslagen maar functioneel werkt het waarschijnlijk hetzelfde (kan op dit moment niet testen).

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.
 
Pascal Schuffelers

Pascal Schuffelers

02/11/2018 06:30:37
Quote Anchor link
Sorry voor mijn late reactie.
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.
 



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.