Beste,

Ik zou graag het verschil tussen 2 DATETIME velden willen uitrekenen. ( in seconden ).

Hoe realiseer ik dit ?

de DATETIME velden in de database heten: "begin" en "eind" :)
Een duwtje in de goeie richting is ook prima :) weet ik in ieder geval waar ik op moet gaan zoeken....

Mvg,

Erik

SELECT
    TIME_TO_SEC(TIMEDIFF(eind, begin)) AS verschil
FROM tabel
Waarom zou je in vredesnaam het verschil in secondes willen hebben?

Maar goed, je kunt van een DATETIME zo een TIMESTAMP maken. En wanneer je er daar 2 van hebt, kun je ze van elkaar gaan aftrekken.

SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00');

Ik zou alleen niet weten waar je dit voor nodig kunt hebben...

Edit: De oplossing van Blanche is vele malen fraaier! Niet aan gedacht, kende hem ook niet. Weer wat geleerd!
@ Blanche,

Maak een screenshot van de reactie van Frank :P
Tevens hartelijk bedankt :)

@ Frank,

Waarom ik dat wil,
uhm, zomaar :p

dit is hem geworden:

SELECT
    TIME_TO_SEC(TIMEDIFF(eind, NOW())) AS verschil
FROM tabel

nu kan ik dus de begintijd ook weer uit de tabel verwijderen, die heb ik eigenlijk helemaal niet nodig :p
Ik heb nog een aanvulling: TIMEDIFF berekent wel het verschil tussen twee DATETIME velden, maar bijvoorbeeld deze query:

SELECT TIMEDIFF( '2006-03-01 13:00:00', '2006-02-01 12:00:00' ) AS verschil

geeft als output: 673:00:00
Als je echt de seconden wilt zul je dus moeten exploden op de : en gaan rekenen met de uren en de minuten. Ik denk daarom dat een UNIX_TIMESTAMP in je query hier handiger is.
@ Jan,

SELECT
TIME_TO_SEC(TIMEDIFF(2006-11-08 21:00:00, 2006-11-08 20:59:00)) AS verschil
FROM tabel

hier is de output: 60
dus precies het aantal seconden....kan niet beter lijkt mij?
Ja natuurlijk, als de tijden zo dicht bij elkaar liggen... Maar ik neem aan dat je een DATETIME gebruikt omdat de datum ook belangrijk is en het dus kan gebeuren dat het verschil meer is dan 1 dag. En dan krijg je dus een output zoals in mijn voorbeeld.
Ook als de data verder uit elkaar liggen zal de functie TIME_TO_SEC() werken. Als ik mijn voorbeeld op jouw datum/tijden toepas, komt er netjes 2422800 uit. En dat is weer gelijk aan 673*3600.
@ Blanche: okee, dan werkt het prima.

Reageren