• 18.07.2025, 08:31
  • S’inscrire
  • Connexion
  • Vous n’êtes pas connecté.

 

miami flashback

Full Member

MYSQL - Differenz aus %Deadline% und Now() berechnen.

samedi 31 octobre 2009, 01:27

Moin allerseits - häng gerade vor nem echt ätzendem (trivialen?) problem.

ich habe eine tabelle und muss diese so sortieren, das die kleinste differenz zwischen 2 datumsangaben oben steht.
trigger schon versucht, kriegs aber ums verrecken nicht hin, häng jetzt knapp 2 stunden hinter der mysql-doku :(

hilfe!

Y0Gi

God

samedi 31 octobre 2009, 12:59

Mal geraten und ungetestet:

Code source

1
2
3
SELECT feld, nochnfeld, TIMEDIFF(datum1, datum2) AS diff
FROM netabelle
ORDER BY diff;


So hat's eine zusätzliche Spalte im Ergebnis, sollte aber das kleinste Problem darstellen. Evtl. kannst du den SELECT-Ausdruck für die Spalte auch als Argument zu "ORDER BY" übergeben, aber da bin ich nicht sicher, ob das so funktioniert:

Code source

1
2
3
SELECT feld, nochnfeld
FROM netabelle
ORDER BY TIMEDIFF(datum1, datum2);

miami flashback

Full Member

samedi 31 octobre 2009, 17:55

danke yogi, hat geklappt! :) auch das untere beispiel funzte mit aktuellem(naja, debian halt^^) mysqlserver.

//edit: doch nicht - das klappt nur tagesweise.

SELECT Name,Deadline, Start, (Deadline+0) - (NOW()+0) AS diff
FROM Flugtafel
ORDER BY diff;

scheint das richtige ergebnis auszuwerfen.

Ce message a été modifié 2 fois. Dernière modification effectuée par "miami flashback" (31 octobre 2009, 21:20)

Y0Gi

God

dimanche 1 novembre 2009, 10:17

Ups, stimmt, das hatte ich nicht berücksichtigt. `DATEDIFF()` würde dagegen nur die Tage ohne Uhrzeit heran ziehen. Ein `DATETIMEDIFF()` gibt es offenbar nicht.

Das lässt sich dennoch nutzen, denke ich:

Code source

1
ORDER BY DATEDIFF(Deadline, Start), TIMEDIFF(Deadline, Start);


Kompakter und ohne redundante Feldnennung dürfte dieses sein:

Code source

1
ORDER BY TIMESTAMPDIFF(SECOND, Deadline, Start);

Je nach Genauigkeitsbedarf auch `FRAC_SECOND` statt `SECOND`.

Eine Idee wäre sonst noch, die beiden Felder als Timestamps zu behandeln, dann könnte man sie einfach subtrahieren. Eine passende Umwandlungsfunktion habe ich aber noch nicht gefunden und die Felder selbst sind vermutlich keine `TIMESTAMP`s, sondern `DATETIME`s.

In deinem Beispiel beziehst du allerdings nur das Feld `Deadline` mit ein, `Start` aber nicht?

miami flashback

Full Member

lundi 2 novembre 2009, 13:19

der name 'start' war leider etwas unglücklich ausgedrückt - die ursprüngliche sql-syntax war wesentlich länger, habe sie einfach sehr gekürzt, ums lesbarer zu machen.
im augenblick ist noch meine order-by-klausel aktiv, wenn ich das nächste mal dran sitze, werde ich mal deine version mit date/timediff testen :)

Discussions similaires