SQL QUERY (SQL SERVER) Разница в дате и времени - PullRequest
2 голосов
/ 28 июля 2011

У меня есть таблица SQL SERVER, в которой есть только одно поле «StartDate», записи выглядят следующим образом:

** 2011-07-28 19: 30: 00.000

2011-07-29 21: 50: 00.000

2011-07-25 09: 20: 00.000 **

Что я хочу сделать:

ПОКАЗАТЬ ЗАПИСИ, если его текущая дата (сегодняшняя дата) и разница во времени между текущим временем и начальной датой не менее 5 минут. Я написал следующий код, но он не показывает разницу во времени?

SELECT * FROM table WHERE DATEDIFF(day, StartDate, GETDATE()) <= 0

Ответы [ 4 ]

3 голосов
/ 28 июля 2011
SELECT StartDate
FROM table
WHERE YEAR(StartDate)=YEAR(GETDATE())
AND MONTH(StartDate)=MONTH(GETDATE())
AND DAY(StartDate)=DAY(GETDATE())
AND (DATEDIFF(minute, StartDate, GETDATE()) >= 5
     OR
     DATEDIFF(minute, StartDate, GETDATE()) <= 5) 
0 голосов
/ 28 июля 2011

Использование BETWEEN, вероятно, немного более оптимально, чем два оператора AND (возможно, нет).Старайтесь не делать вычисления для каждой строки, если вам не нужно.Выполнение DATEADD только на текущую дату будет рассчитываться только один раз.

SELECT 
   whatever
FROM
   table
WHERE 
    StartDate
        BETWEEN FLOOR( CAST( GETDATE() AS FLOAT ) )
        AND DATEADD(minute, -5, GETDATE())

Я интерпретирую вопрос как поиск строк, в которых указана дата сегодня (между началом сегодняшнего дня), но не в течение последних 5 минут (и менее 5 минут назад).Это может быть не то, что вы хотели.

Надеюсь, что помогает

0 голосов
/ 28 июля 2011

Есть два способа сделать это: DateDiff, другой - DATEADD. Судя по тому, как я прочитал твой вопрос, DateAdd должен это сделать. Вот пример;

    SELECT *
  FROM [dbo].[TABLE]
  WHERE [LAST_UPDATE] > DATEADD(minute,-5,GetDate())
0 голосов
/ 28 июля 2011

Как насчет:

SELECT StartDate
    ,GETDATE()
    ,DATEDIFF(day, StartDate, GETDATE())
    ,DATEDIFF(minute, StartDate, GETDATE())
    ,*
FROM table
WHERE DATEDIFF(day, StartDate, GETDATE()) <= 0
    AND DATEDIFF(minute, StartDate, GETDATE()) >= 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...