Запрос разницы дат sql

Мне нужно взять разницу двух дат, которые являются столбцами в моей таблице: 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? Кроме того, Group - это зарезервированное ключевое слово, вы не должны использовать его в качестве имени таблицы. Наконец, вы отметили datediff, понимаете ли вы, что есть функция под названием datediff, специально предназначенная для этих вычислений?

HoneyBadger 19.06.2018 09:43

Если вы также хотите получить разницу в днях (?) Между датами, почему вы храните эти данные как varchar? Храните данные как правильный тип данных: целые числа как int, десятичные числа как numeric / decimal, даты и date(time) и т. д. varchar - это нет, тип данных «один размер подходит всем».

Larnu 19.06.2018 09:48

Однако вам может быть лучше использовать для этого вычисляемый столбец (Persisted), если вам нужно, чтобы AITime всегда имел значение разницы в датах. Затем, если один столбец обновляется, AITime тоже.

Larnu 19.06.2018 09:49
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
3
106
2

Ответы 2

Не понимаю в своем вопросе, какую разницу вы хотите (день, месяц, год). Но это может вам помочь.

SELECT DATEDIFF(month, 'Start_date_variable', 'End_date_variable') AS DateDiff;

Синтаксис как:

DATEDIFF(interval, date1, date2)

Интервал может быть любым, например, днем, месяцем, годом, неделей, часами, секундами и т. д.

Все дата, месяц, год, разница во времени, которую я хочу

chiranth virat 19.06.2018 11:21

@chiranthvirat, а теперь у вас есть решение? Если нет, поясните, пожалуйста, свой вопрос, включая вопросы, которые я поднял в своем первоначальном комментарии.

HoneyBadger 20.06.2018 08:47

@HoneyBadger у меня все еще есть проблемы В основном я хочу, чтобы две даты были в этом формате YYYY-MM-DD HH: MM: SS, например разница 2018-02-23 14: 35: 40.170 и 2018-04-03 08: 43: 09.833 Дайте мне команду, которую я извлекаю из столбца моей таблицы.

chiranth virat 20.06.2018 09:10

Пожалуйста, отредактируйте свой вопрос, чтобы прояснить. Убедитесь, что вы обратились к пунктам моего другого комментария. Кроме того, что означает различие 2018-02-23 14:35:40.170? Добавьте в свой вопрос образцы данных и ожидаемый результат (в виде форматированного текста, а не изображения).

HoneyBadger 20.06.2018 09:14

Сначала выполните синтаксический анализ до 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?

HoneyBadger 19.06.2018 10:03

И почему при конвертации в varchar вы не указываете длину?

Larnu 19.06.2018 10:10

@HoneyBadger, Ой и спасибо за указание, я, наверное, неправильно понял что-то, я обновил, так что, если это то, что он действительно хочет?

MT-FreeHK 19.06.2018 10:33

Set timediff = DATEDIFF (second, LastAIResponseReceivedDate, LastUploadedDate) Оператор выдает ошибку @ = и at Second

chiranth virat 19.06.2018 11:58

@chiranthvirat, извините, снова опечатка, должно быть "s" вместо "second"

MT-FreeHK 19.06.2018 12:01

Другие вопросы по теме