timediff

timediff

am 01.11.2006 11:16:08 von Andreas Sakowski

Hallo.


Bei folgender Query hätte ich erwartet, das der Vergleich
wahr ergibt:

select
timediff( '2006-10-10 10:00:00' , '2006-09-10 10:00:00' )
, timediff( '2006-10-10 10:00:00' , '2006-01-10 10:00:00' )
, timediff( '2006-10-10 10:00:00' , '2006-09-10 10:00:00' )
< timediff( '2006-10-10 10:00:00' , '2006-01-10 10:00:00' ) \G

| 720:00:00 | 6552:00:00 | 0 |

Tatsächlich ergibt der Vergleich unwahr. Es wird also der
Text verglichen und nicht die Stunden, Minuten, Sekunden.

Ist meine Erwartung falsch?


Gruß
Andreas

Re: timediff

am 01.11.2006 11:27:13 von Andreas Kretschmer

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de

Re: timediff

am 01.11.2006 12:32:38 von Axel Schwenke

"Andreas Sakowski" wrote:
>
> Bei folgender Query hätte ich erwartet, das der Vergleich
> wahr ergibt:
>
> select
> timediff( '2006-10-10 10:00:00' , '2006-09-10 10:00:00' )
> , timediff( '2006-10-10 10:00:00' , '2006-01-10 10:00:00' )
> , timediff( '2006-10-10 10:00:00' , '2006-09-10 10:00:00' )
> < timediff( '2006-10-10 10:00:00' , '2006-01-10 10:00:00' ) \G
>
>| 720:00:00 | 6552:00:00 | 0 |
>
> Tatsächlich ergibt der Vergleich unwahr. Es wird also der
> Text verglichen und nicht die Stunden, Minuten, Sekunden.
>
> Ist meine Erwartung falsch?

MySQL hat keinen eigenen Typ für Zeitintervalle. Praktisch werden
Zeitintervalle immer aus Strings geparst bzw. als String zurück
gegeben. Das ist also kein Bug, sondern ein missing Feature.

Ein Workaround wäre, deine timediff() Ausdrücke mit time_to_sec()
in die jeweilige Zeitdauer in Sekunden umzuwandeln. Dann liefert
der Vergleich auch das erwartete Ergebnis.


XL