Интервалы в Postgres довольно гибкие, поэтому значения часов больше 23 не обязательно переносятся на дни.Используйте jusify_interval()
, чтобы вернуть их к обычным "дням" и "часам". "
Итак:
select justify_interval(random() * interval '10 day 5 hour')
from generate_series(1, 200)
order by 1 desc;
вернет значения с соответствующими значениями для дней, часов, минут исекунд.
Теперь, почему вы не получаете интервалы с более чем 10 днями? Это простая случайность. Если вы увеличите количество строк до 200 (как указано выше), вы увидите их (во всехвероятность). Если вы запускаете код несколько раз, иногда вы не увидите ничего в этом диапазоне, иногда вы увидите два.
Почему? Вы спрашиваете, как часто вы получаете значение 240+ вдиапазон 245. На эти первые 5 часов приходится 0,02% диапазона (около 1/50). Другими словами, выборка из 50 недостаточно велика - любая конкретная выборка из 50 случайных значений, вероятно, будет отсутствовать 1 или более5-часовой диапазон.
Плюс, без justify_interval()
вы, вероятно, в любом случае пропустите их, поскольку они могут отображаться как 9 дней с компонентом часов больше 23.