Мне нужно взять разницу двух дат, которые являются столбцами в моей таблице:
LastAIResponseReceivedDate,LastUploadedDate
Я использую это утверждение:
update Group set AITime=(CONVERT (varchar,(LastAIResponseReceivedDate-LastUploadedDate),121)) where GroupId=2 and Id=5
Я получаю разницу во времени правильно, но разница в дате неверна 1900-01-01 01:56:56.427
Как правильно получить дату разницы
Если вы также хотите получить разницу в днях (?) Между датами, почему вы храните эти данные как varchar? Храните данные как правильный тип данных: целые числа как int, десятичные числа как numeric / decimal, даты и date(time) и т. д. varchar - это нет, тип данных «один размер подходит всем».
Однако вам может быть лучше использовать для этого вычисляемый столбец (Persisted), если вам нужно, чтобы AITime всегда имел значение разницы в датах. Затем, если один столбец обновляется, AITime тоже.


Не понимаю в своем вопросе, какую разницу вы хотите (день, месяц, год). Но это может вам помочь.
SELECT DATEDIFF(month, 'Start_date_variable', 'End_date_variable') AS DateDiff;
Синтаксис как:
DATEDIFF(interval, date1, date2)
Интервал может быть любым, например, днем, месяцем, годом, неделей, часами, секундами и т. д.
Все дата, месяц, год, разница во времени, которую я хочу
@chiranthvirat, а теперь у вас есть решение? Если нет, поясните, пожалуйста, свой вопрос, включая вопросы, которые я поднял в своем первоначальном комментарии.
@HoneyBadger у меня все еще есть проблемы В основном я хочу, чтобы две даты были в этом формате YYYY-MM-DD HH: MM: SS, например разница 2018-02-23 14: 35: 40.170 и 2018-04-03 08: 43: 09.833 Дайте мне команду, которую я извлекаю из столбца моей таблицы.
Пожалуйста, отредактируйте свой вопрос, чтобы прояснить. Убедитесь, что вы обратились к пунктам моего другого комментария. Кроме того, что означает различие 2018-02-23 14:35:40.170? Добавьте в свой вопрос образцы данных и ожидаемый результат (в виде форматированного текста, а не изображения).
Сначала выполните синтаксический анализ до datetime, вам нужно
Set timediff = DATEDIFF(s, LastAIResponseReceivedDate,LastUploadedDate)
Сохраните разницу во времени, так как секунды удобнее использовать в дальнейшем. Если вы хотите сохранить в каком-либо формате даты, помните, что не datetime, разница во времени - это не datetime. Так,
Select CONVERT(varchar, FLOOR(timediff/(3600*24))) + 'D ' + CONVERT(varchar, DATEADD(s, timediff, 0), 114)
Почему вы переходите на varchar?
И почему при конвертации в varchar вы не указываете длину?
@HoneyBadger, Ой и спасибо за указание, я, наверное, неправильно понял что-то, я обновил, так что, если это то, что он действительно хочет?
Set timediff = DATEDIFF (second, LastAIResponseReceivedDate, LastUploadedDate) Оператор выдает ошибку @ = и at Second
@chiranthvirat, извините, снова опечатка, должно быть "s" вместо "second"
Какие бывают типы данных? И почему вы сохраняете результат как varchar? Кроме того, Group - это зарезервированное ключевое слово, вы не должны использовать его в качестве имени таблицы. Наконец, вы отметили
datediff, понимаете ли вы, что есть функция под названиемdatediff, специально предназначенная для этих вычислений?