Я только что столкнулся с этой же проблемой, когда пытался создать метку времени Unix из даты,
Вот пример того, что я пытался сделать:
select DATEDIFF(second,'1970-01-01','2200-01-11');
Переполнение, поскольку DATEDIFF пытается вернуть целое число со знаком, которое может содержать секунды всего немногим более 68 лет.
Чтобы получить метку времени Unix (которая мне нужна, чтобы я могла скормить ее в Sphinx Search), вы можете сначала получить разницу в минутах, затем привести результат к большому целому числу и умножить на 60 секунд: *
select CAST(DATEDIFF(minute,'1970-01-01','2200-01-11') AS BIGINT) * 60;
Теперь мы должны иметь возможность обрабатывать даты, которые различаются по разнице до 4000 лет или около того. Если вам нужно еще больше места, просто измените минуты с большими и большими интервалами и соответственно измените множитель секунд.