Найти записи, произведенные за последний час - PullRequest
11 голосов
/ 08 июня 2010

У меня есть поле smalldatetime с именем myTime запись, когда запись была создана. Мне нужен синтаксис, который выбирает записи, созданные за последний час.

думал, что это будет:

and DATEDIFF("hh", datePart(hh, myTime), DatePart(hh, GETDATE()) < 1

где datediff

  1. ищет часы
  2. смотрит на часовую часть данных в myTime как начальную
  3. смотрит на текущую часть часов для окончания
  4. производит int, которое сравнивается с '1'

результаты, которые я получаю, явно далеко, далеко, но я не знаю почему.

ADDENDUM: Поскольку оба ответа по сути совпадают, тот факт, что это ничего не возвращает для меня, должен проследить, как была создана моя таблица. Он создан LogParser для работы с журналами IIS и имеет информацию о дате / времени, распределенную по двум различным полям. Date содержит только информацию о дате, когда все сегодняшние записи выглядят так: 2010-06-08 00:00:00.000, а поле времени выглядит так: 2010-01-01 15:02:51.000 (часть даты для всех записей - 01 января 01).

Ответы [ 4 ]

30 голосов
/ 08 июня 2010

Используйте это:

SELECT  *
FROM    Whatever
WHERE   myTime > DATEADD(HOUR, -1, GETDATE())
2 голосов
/ 17 июня 2015

Если вы хотите целые часы, используйте следующее ...

--This Hour
SELECT  *
FROM    Whatever
WHERE   myTime >= dateadd(hour, datediff(hour, 0, GETDATE()), 0)

--Last Hour
SELECT  *
FROM    Whatever
WHERE   myTime  < dateadd(hour, datediff(hour, 0, GETDATE()), 0) AND  myTime >= dateadd(hour, datediff(hour, 0,  DATEADD(HOUR, -1, GETDATE())), 0)

--Hour before last
SELECT  *
FROM    Whatever
WHERE   myTime < dateadd(hour, datediff(hour, 0,  DATEADD(HOUR, -1, GETDATE())), 0) AND  myTime >= dateadd(hour, datediff(hour, 0, DATEADD(HOUR, -2, GETDATE())), 0)
2 голосов
/ 08 июня 2010

используйте SELECT * ИЗ YourTable, ГДЕ YourDateTime> = DATEADD (чч, -1, GETDATE ())

0 голосов
/ 27 сентября 2017

Хотя это WHERE myTime > DATEADD(HOUR, -1, GETDATE()) должно было сработать для меня, по какой-то странной причине поле datetime на моем сервере sql настроено странным образом, так как приведенный выше код будет возвращать весь день, а не только час до Now.После некоторого устранения неполадок я обнаружил, что GETDATE () фактически на 7 часов опережает текущее время, поэтому мой запрос выглядит следующим образом:

WHERE myTime BETWEEN DATEADD(HH, 6, GETDATE()) AND DATEADD(HH, 7, GETDATE())

Итак, DATEADD (HH, 7, GETDATE () теперь плюс 7 часов (который получается в соответствии с текущим временем в соответствии с базой данных). И затем вычтите час, чтобы получить все строки в этом часовом блоке. Я подумал, что я должен опубликовать это просто, чтобы помочь любому, имеющему ту же проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...