Ошибка сравнения даты и времени в sql? - PullRequest
6 голосов
/ 10 февраля 2011

Я использовал проверку даты и времени для планирования отчета ... Я должен запланировать, что отчеты будут только на будущие дату и время, а не на предыдущие дату и время .. Я использовал это

    declare @Dt varchar(50) 
    declare @Hr varchar(50)
    declare @trandate_time_tmp as TIME(0)

    select @trandate_time_tmp = getdate()
    set @Dt = DATEDIFF (D,@schedule_date ,@trandate_tmp )
    set @Hr = DATEDIFF (S,@schedule_date ,@trandate_time_tmp )

    if ( @Dt > 0)
    begin
        raiserror('Schedule Date should not be earlier than system date',16,1)
        return
    end

    if ( @Hr > 0) 
    begin
        raiserror('Schedule Time should not be earlier than system time',16,1)
        return
    end

Для части даты она проверяется правильно, но для времени она выдает ошибку как

The datediff function resulted in an overflow. The number of dateparts separating two date/time instances is too large. Try to use datediff with a less precise datepart.

Ответы [ 2 ]

1 голос
/ 24 февраля 2011

Не совсем отвечаю на ваш вопрос, но, возможно, решение вашей проблемы. Вам не нужно использовать DATEDIFF и проверять результаты, вы можете просто сравнить две даты.

IF ( @schedule_date <= GETDATE() )
BEGIN
  RAISERROR('Schedule date should not be earlier than system date', 16, 1)
  RETURN
END
0 голосов
/ 13 января 2012

Я только что столкнулся с этой же проблемой, когда пытался создать метку времени 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 лет или около того. Если вам нужно еще больше места, просто измените минуты с большими и большими интервалами и соответственно измените множитель секунд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...