Что вы хотите сделать, это добавить их вместе, а затем сравнить, чтобы получить дату. К сожалению, вы не можете добавить date
и time
вместе. К счастью, вы можете добавить datetime
и time
вместе.
Итак:
WHERE (CAST(date as datetime) + time) >= DATEADD(HOUR, -2, GETDATE())
Если time
является символ, то вы должны быть в состоянии преобразовать это также:
WHERE (CAST(date as datetime) + CAST(time as time)) >= DATEADD(HOUR, -2, GETDATE())
Или, если ПМ избыточно часть time
, то:
WHERE (CAST(date as datetime) + CAST(LEFT(time, 8) as time)) >= DATEADD(HOUR, -2, GETDATE())
К сожалению, это не будет использовать индекс. Но, один простой метод заключается в использовании вычисляемого столбца и индекс:
alter table report add datetimecol as (CAST(date as datetime) + time);
create index idx_report_datetimecol on report(datetimecol);
EDIT:
Вы, кажется, есть проблема с вашими данными. Попробуйте:
select time
from report
where try_convert(time, timecol) is null;
или:
select time
from report
where try_convert(time, left(timecol, 8)) is null;
Если столбец дата также строка (очень плохая идея, чтобы не использовать собственные типы данных), а затем проверить, что хорошо.
, что тип данных является 'столбец Time'? Можете ли вы показать DDL/схему, чтобы мы поняли эту идею? – dlatikay