2015-09-21 24:00:00
moet dit niet '2015-09-22 00 :00:00 zijn.
Een tijd is volgens mij nooit als 24:00 geschreven
Jan
Link gekopieerd
Aangepast , maar daar ging het eigenlijk niet om.
Met NOW() alleen kom ik er niet verder mee.
Ik zal iets moeten doen met variable of zo of met formulier.
Dacht idd iets met NOW() alleen krijg de syntax niet goed.
SELECT
v.id,time,laag_tarief
v.hoog_tarief - IFNULL((SELECT vg.`hoog_tarief` FROM readings vg WHERE vg.id = (v.id - 1)),0) AS diff_hoog
FROM
readings v WHERE time=NOW())
Werkt niet
Link gekopieerd
NOW() geeft de huidge datum + tijd.
ik denk dat als je alles van vandaag zoekt, je moet gebruiken
WHERE time > CURRENT_DATE
Dat zegt dus : where time > '2015-09-22'
en '2015-09-22 17:24' is inderdaad groter dan dat.
In dit geval ga ik ervanuit dat er geen records zijn met de datum van morgen, dus hoeft er geen "AND time < datum vanmorgen" bij hoeft
Link gekopieerd
Werkt dit niet voor jou?
WHERE FROM_UNIXTIME(`time` , '%Y-%m-%d' ) = CURDATE()
Link gekopieerd
Kijk daar is de verlossende oplossing en zo voor de hand, was er zo dichtbij alleen als je de syntax iets fout hebt doet het niks.
Bedankt kan ik weer iets verder.
Link gekopieerd
Of mogelijk makkelijker, als je alle records wilt selecteren waarbij de "time" waarden betrekking hebben op de huidige dag:
WHERE DATE(time) = CURRENT_DATE()
(en als "time" van het type datetime is is dit een (zeer) slecht gekozen naam imo)
Link gekopieerd
"time" is al een slechte keuze, omdat het eigenlijk een gereserveerd woord is. Al maakt Mysql daar een uitzondering voor tov de sql standaard.
@Thomas.
nadeel van DATE(time) is, dat je eerst een bewerking doet op alle records in de kolom time en pas daarna kunt kijken of het record ergens aan voldoet.
Als je 100.000 records hebt, dan moet je dus 100.000 bewerkingen doen voor je kunt vergelijken.
Met time > current_date kun je de waarde zelf vergelijken en met wat geluk kan Mysql dan ook een index gebruiken.
[size=xsmall]Toevoeging op 22/09/2015 17:41:01: [/size]
@Jan:
de unix_timestamp is het aantal seconden sinds 1970
een integer dus.
De timestamp van Mysql is iets anders
Link gekopieerd
@Ivo, fair enough.
Je zou ook voor een "half open domein" kunnen gaan( [a, b>, oftewel van-en-met tot-en-zonder ):
WHERE '2015-09-22 00:00:00' <= time AND time < '2015-09-23 00:00:00'
Of een BETWEEN als je dat leuker vindt.
Link gekopieerd
FROM
readings v WHERE time> CURRENT_DATE
Dit doet nu voor wat het moet doen.
Ik ga er een formulier aan hangen en dan kan ik een datum vragen evt met bepaalde tijd of tussen bepaalde tijd.
Bedankt alvast
Link gekopieerd