Я хочу рассчитать разницу dbtime. Что я здесь делаю неправильно?
Declare @StartTime as Date
Declare @FinishTime as Date
set @StartTime = (select dbtime from table1
where detail like 'started:Jan 31 2019')
set @FinishTime = (select dbtime from table1
where detail like 'finished. Jan 31 2019')
select datediff(ss, @StartTime, @FinishTime) as ExecutionTime
Использование DATE вместо DATETIME? какое точное сообщение об ошибке?
Вы определили переменные типа DATE, то есть просто ДАТА, без временной части. Таким образом, вы не можете получить разницу в секундах от этих... Вместо этого используйте DATETIME2(0) - ЕСЛИ столбец dbtime в вашем table1 также имеет тип DATETIME или DATETIME2.
Сообщение об ошибке будет выглядеть примерно так: «значение ss datepart недопустимо для даты типа данных». Вам нужно изменить типы данных на datetime,
Поскольку declare @Start as Date = '2010-01-01', @End as Date = '2010-01-02'; select DateDiff( second, @Start, @End ); работает, пытаетесь ли вы получить разницу, превышающую размер int? Или это что-то совершенно другое, например, подзапрос, возвращающий более одного значения? В стороне: вы можете использовать select @StartTime = dbtime from table1 where detail like 'started:Jan 31 2019'; вместо set. Вы также можете получить несколько значений из одного запроса.


Попробуйте с типами DATETIME.
И выборки для этих переменных должны возвращать только одно значение.
Ф.э. используя MAX, MIN или TOP 1 & ORDER BY.
declare @StartTime DATETIME;
declare @FinishTime DATETIME;
declare @SecondsBetweenStartAndFinish INT;
set @StartTime = (select MAX(dbtime) from table1
where detail like 'started%Jan 31 2019%');
set @FinishTime = (select MAX(dbtime) from table1
where detail like 'finished%Jan 31 2019%');
set @SecondsBetweenStartAndFinish = datediff(second, @StartTime, @FinishTime);
select @SecondsBetweenStartAndFinish as ExecutionTime;
Какую ошибку вы получаете? Какую базу данных вы используете? Неверные значения? В вашем вопросе недостаточно информации.