Странная арифметика

varnav
Дата: 14.02.2013 18:38:22
CREATE TABLE `timetest` ( 
`d1` DATETIME NULL DEFAULT NULL, 
`d2` DATETIME NULL DEFAULT NULL 
) 
COLLATE='latin1_swedish_ci' 
ENGINE=MyISAM; 

INSERT INTO timetest VALUES ('2013-02-14 10:00:02', '2013-02-14 09:59:59'); 

SELECT d1, d2, d1-d2 AS substraction FROM timetest; 


У меня результат получается 4043.
Хотя очевидно что правильный ответ - 3.

В чём может быть дело?
Akina
Дата: 14.02.2013 18:41:33
Для получения правильного ответа следует использовать DateDiff.
javajdbc
Дата: 14.02.2013 18:43:43
varnav,

попробуйте так, вы увидете проблему:

SELECT d1, d2, 0+d1,0+d2 AS substraction FROM timetest;

решение, очевидно в использовании специальных финкций
или переводить время в цифры в явном виде.
varnav
Дата: 14.02.2013 18:45:27
Забавно - ведь на продакшене оно работало месяцами без проблем именно в таком виде.
Поменяю на DATEDIFF()
varnav
Дата: 14.02.2013 18:49:31
SELECT d1, d2, TIMESTAMPDIFF(second,d2,d1) AS substraction FROM timetest;
показывает нормальный результат.

Но я всё таки так и не понял что было то и откуда 4043?
javajdbc
Дата: 14.02.2013 19:03:39
varnav,

Элементарно Ватсон! :-)

Вы сделали СКЛ как я предложил выше? увидели результат?

Очевидно изменился механиз неявного перевода:
10:00:02 перевелись в 100002
09:59:59 перевелиь в 95959
100002 - 95959 -> 4043