DateDiff в SQL Server с просьбой о помощи - PullRequest
0 голосов
/ 01 августа 2009

Я использую SQL Server 2008. У меня есть таблица со столбцом типа datetime, который называется CreateTime. Мне нужно выбрать все записи из этой таблицы, чей CreateTime более 3 дней и полчаса от текущего времени (время UTC). Я использую процедуру хранения T-SQL.

Кстати: столбец CreateTime уже давно.

Я потратил довольно много времени на изучение и поиск помощи в MSDN для DateDiff, но не могу понять. Может ли кто-нибудь показать мне образец, пожалуйста?

спасибо заранее, George

Ответы [ 3 ]

5 голосов
/ 01 августа 2009

Вы можете выбрать и добавить предложение WHERE с помощью DATEDIFF, используя минуты:

SELECT (fields)
FROM (table)
WHERE 
  DATEDIFF(MINUTE, CREATETIME, getutcdate()) <= (3*24*60 + 30)

И, конечно, если вам нужны только те строки, которые БОЛЬШЕ , чем через 3 дня и 30 минут, просто используйте обратное:

WHERE 
  DATEDIFF(MINUTE, CREATETIME, getutcdate()) > (3*24*60 + 30)

Образец:

SELECT      
  DATEDIFF(MINUTE, '2009-08-01 08:00:00', getutcdate()),
  DATEDIFF(MINUTE, '2009-07-31 20:00:00', getutcdate()),
  DATEDIFF(MINUTE, '2009-07-23 20:00:00', getutcdate())

дает в результате:

96    816    12337

Таким образом, первые две даты все еще находятся в пределах вашей 4350-минутной шкалы (менее 3 дней и 30 минут назад), а третья дата еще дальше.

Марк

3 голосов
/ 01 августа 2009

Вам нужно DATEADD :

WHERE DATEADD(minute, 4350, CreateTime) <= getutcdate()

Или, как вы упоминали, вы можете использовать DATEDIFF :

WHERE DATEDIFF(minute, CreateTime, getutcdate()) <= 4350

(4350 - «3 дня и 30 минут» в минутах)

2 голосов
/ 01 августа 2009

Один незначительный спор с данными ответами, хотя они верны. Не применять функцию к столбцу: применить функцию к значению сравнения.

Если индекс CREATETIME проиндексирован, то это сканирование, а не поиск с помощью функции в столбце. Вам не нужны миллионы строк, чтобы это стало проблемой.

Адаптация ответа marc_s:

SELECT (fields)
FROM (table)
WHERE 
  CREATETIME <= DATEADD(MINUTE, - (3*24*60 + 30), getutcdate())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...