Это результат того факта, что TIMESTAMPDIFF
возвращает оценку разницы между временными метками, а не фактическое значение, как ожидалось.
Из справки , стр. 435 (при условии, для iSeries):
Следующие предположения используются при преобразовании значений элемента
к запрашиваемому типу интервала:
- Один год имеет 365 дней.
- У одного года 52 недели.
- Один год имеет 12 месяцев.
- Один квартал имеет 3 месяца.
- Один месяц имеет 30 дней.
- Одна неделя имеет 7 дней.
- Один день имеет 24 часа.
- Один час имеет 60 минут.
- Одна минута имеет 60 секунд.
- Одна секунда имеет 1000000 микросекунд.
И фактический расчет:
секунд + (минуты + (часы + ((дни + (месяцы * 30) + (годы * 365)) * 24)) * 60) * 60
Это по понятным причинам неточно. Не полезно.
Кажется, это прямое следствие того, как возвращаются арифметические результаты с отметками времени.
То есть;
SELECT
TIMESTAMP('1971-03-02 00:00:00') - TIMESTAMP('1970-01-01 00:00:00')
FROM sysibm/sysdummy1
возвращается:
10,201,000,000.000000
Which can be divided into:
1
год
02
месяцев
01
дней
00
часов
00
минут
00
секунд
000000
микросекунд
Что является неточным Период / продолжительность информации Хотя существует множество ситуаций, когда этот тип данных является полезным, это не одна из них.
Краткий ответ: Точный ответ не может быть правильно рассчитан в базе данных, и фактически не должен .
<Ч />
Длинный ответ:
Расчеты возможны , но довольно сложны и определенно не подходят для расчета в базе данных. Я не собираюсь их здесь воспроизводить (посмотрите JodaTime , если вам интересно, в частности различные подклассы Chronology
). Ваша самая большая проблема будет в том, что месяцы не одинаковы. Кроме того, вы столкнетесь с серьезными проблемами, если ваши временные метки будут отличаться от UTC, а точнее, переход на летнее время будет разрушать вычисления. Зачем? Потому что смещения могут измениться в любое время, для любой страны.
Может быть, вы могли бы объяснить почему вам нужно количество миллисекунд? Надеюсь, вы используете Java (или можете сделать это) и можете использовать java.time
. Но если вы на iSeries, это, вероятно, RPG ...