Вычтите часы из текущей даты и сравните со значением столбца, тип данных которого — datetime

Мне нужны все значения столбца MAFN, которые были добавлены в таблицу за последний час (: мм). Столбец ReturnDt хранит время добавления в формате DateTime, например '2005-01-11 08:50:24.767'.

Я могу получить часы для ReturnDt и получить текущий час (в двух отдельных запросах).

SELECT  ReturnDt, 
       DATEPART(hour, ReturnDt) As 
FROM [Sidney].[dbo].[LibraryTransactions]

И

SELECT GETDATE() 'Today', DATEPART(hh,GETDATE()) 'Hour Part'

Но этого недостаточно по понятным причинам. Во-первых SELECT GETDATE()... не работает как подзапрос. Во-вторых, я не могу вычесть 1 час из результата запроса SELECT GETDATE(). В-третьих, даже если два вышеперечисленных как-то сработали, запросы сокращают время до часов и не учитывают дату.

Я использую SQL Server 2005.

Заранее спасибо!

Редактировать:

Таблица выглядит так: Вычтите часы из текущей даты и сравните со значением столбца, тип данных которого — datetime

Ожидаемый результат: если я запустил запрос сегодня (18 марта 2022 г.) в 16:00, я должен получить только эти значения. Вычтите часы из текущей даты и сравните со значением столбца, тип данных которого — datetime

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

Dale K 19.03.2022 01:47

Интересно, рассматривали ли вы возможность использования функции DATEADD() с единицей измерения минут или часов?

Dale K 19.03.2022 02:00

@Dale K DTEADD( ) работает в SQL Server (начиная с 2008 года). Я использую SQL Server 2005

Brute 19.03.2022 02:08

В соответствии с руководством по вопросам, пожалуйста, не публикуйте изображения кода, данных, сообщений об ошибках и т. д. - скопируйте или введите текст в вопрос. Пожалуйста, зарезервируйте использование изображений для диаграмм или демонстрации ошибок рендеринга, вещей, которые невозможно точно описать с помощью текста.

Dale K 19.03.2022 02:13

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

Dale K 19.03.2022 02:14

И я не думаю, что вы правы, я видел множество статей, в которых упоминается использование dateadd с 2005 года. Вы уверены, что отсутствующая функция на самом деле является вашей ошибкой?

Dale K 19.03.2022 02:23

И ReturnDt хранится как datetime или varchar?

Dale K 19.03.2022 02:26
WHERE ReturnDt >= dateadd(hour, -1, getdate()); будет казаться тем, что вы хотите.
Dale K 19.03.2022 02:27

Также GETDATE() 'Today' должно быть GETDATE() AS [Today] - одинарные кавычки не должны использоваться для псевдонимов столбцов, потому что они выглядят как строковые литералы и, они устарели в некоторых формах (см. эта почта для получения дополнительной информации).

Aaron Bertrand 19.03.2022 03:49

Я повторю то, что сказал Дейл, я не уверен, почему вы думаете, что DATEADD() был введен в SQL Server 2008. Вот ссылка из документации SQL Server 2005, и это даже не тогда, когда он был введен. Вы также можете найти его на странице 2267 версия Books Online 2000 г. (и в документах 6.5 или 7.0, если сможете их найти). Кроме того, вы можете просто попробовать. Или апгрейдить и не париться о древней истории.

Aaron Bertrand 19.03.2022 20:42
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
10
41
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как насчет DateDiff()

where
   DateDiff( hour, ReturnDT, getdate() ) > 1

Спасибо за комментарий. Нет, это не работает. На выходе нет никакой разницы, но, по крайней мере, это не дает ошибки

Brute 19.03.2022 02:16

это работает, если я переворачиваю знак равенства. where DateDiff( hour, ReturnDT, getdate() ) < 1 Еще раз спасибо!!

Brute 19.03.2022 02:27

Почему бы не перевернуть его, чтобы индекс на ReturnDT (сейчас или в будущем) имел какую-то надежду на использование? WHERE ReturnDT >= DATEADD(HOUR, -1, GETDATE());?

Aaron Bertrand 19.03.2022 03:28

@AaronBertrand, не могу использовать DateAdd(), потому что они работают с SQL2005, и он недоступен, но да, тест на равенство свопов

DRapp 19.03.2022 12:35

@DRapp DATEADD() определенно был доступен в 2005 году.

Aaron Bertrand 19.03.2022 12:36

@AaronBertrand, по-видимому, не согласно сообщению пользователя, поскольку он указал, что недоступен. Но кто я такой, чтобы говорить, что у них есть :)

DRapp 19.03.2022 12:36

@DRapp OP ошибается, что DATEADD() было добавлено в SQL Server 2008; вот страница документации из SQL Server 2005, в котором перечислены его функции. Поэтому я думаю, что ОП может получить какую-то другую несвязанную ошибку.

Aaron Bertrand 19.03.2022 20:28

@AaronBertrand, не моя проблема, и это не должно продолжаться, если мы спорим. У них было одно, у них есть разрешение, независимо от контекста. СДЕЛАНО.

DRapp 20.03.2022 02:02

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