sql >> Databasteknik >  >> RDS >> Mysql

oväntade resultat för timediff

Redigera: Vilken version av MySQL använder du? Det fungerar fint på 5.0.22 åtminstone. Jag körde precis den här frågan. se här

 mysql> SELECT TIME_TO_SEC(TIMEDIFF('2000:01:01 00:00:00', '2001:01:01 00:00:00'));
 +---------------------------------------------------------------------+
 | TIME_TO_SEC(TIMEDIFF('2000:01:01 00:00:00', '2001:01:01 00:00:00')) |
 +---------------------------------------------------------------------+
 |                                                           -31622400 |
 +---------------------------------------------------------------------+
 1 row in set (0.00 sec)

Såg du här ? Det kan vara trunkeringsproblem eftersom tidsintervallet är mycket mindre än datumskillnaden du har.

Originalt svar

Använd den här

    SELECT TIMESTAMPDIFF(SECOND,'2000:01:01 00:00:00', '2001:01:01 00:00:00');
    +--------------------------------------------------------------------+
    | TIMESTAMPDIFF(SECOND,'2000:01:01 00:00:00', '2001:01:01 00:00:00') |
    +--------------------------------------------------------------------+
    |                                                           31622400 |
    +--------------------------------------------------------------------+

Problemet är att du försöker konvertera en negativ tid till tid i sekund. Att byta variabler kommer att göra jobbet.

    SELECT TIME_TO_SEC(TIMEDIFF('2001:01:01 00:00:00','2000:01:01 00:00:00'));
    +--------------------------------------------------------------------+
    | TIME_TO_SEC(TIMEDIFF('2001:01:01 00:00:00','2000:01:01 00:00:00')) |
    +--------------------------------------------------------------------+
    |                                                           31622400 |
    +--------------------------------------------------------------------+



  1. Hur man väljer tills en summa uppnås

  2. Hur man distribuerar PostgreSQL för hög tillgänglighet

  3. Hur extraherar man grupp från reguljärt uttryck i Oracle?

  4. Fullständig MariaDB-kryptering i vila och under transport för maximalt dataskydd - del två