SQL Server 2005 выбирает поля с определенного периода времени - PullRequest
0 голосов
/ 08 августа 2011

Сейчас я использую эту команду, чтобы получить все поля текущего дня:

SELECT COUNT(*) 
FROM [SecureOrders]
WHERE DateTime >= DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
      AND 
      DateTime < DATEADD(day, DATEDIFF(day, 0, GETDATE()), 1)

Однако я хочу иметь возможность получать поля, которые были введены между вчерашним днем ​​и полуднем - как я могу это сделать?

Ответы [ 4 ]

2 голосов
/ 08 августа 2011

0,5 - полдень (например, полдня)

WHERE DateTime >= DATEADD(day, DATEDIFF(day, 0, GETDATE()), -0.5)
      AND 
      DateTime < DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0.5)
0 голосов
/ 08 августа 2011

Вариация решения @ Аарона Бертрана , без объявления переменной и без обработки ненулевого целочисленного значения в качестве даты:

SELECT COUNT(*)
FROM SecureOrders o
  CROSS JOIN (
    SELECT DATEADD(HOUR, DATEDIFF(DAY, 0, GETDATE()) * 24 + 12, 0)
  ) AS d (TodayNoon)
WHERE o.DateTime < d.TodayNoon
  AND o.DateTime >= DATEADD(DAY, -1, d.TodayNoon)
0 голосов
/ 08 августа 2011

это может показаться уродливым, но должно работать

SELECT 
  COUNT(*) 
FROM 
  [SecureOrders] 
WHERE 
  DateTime >= DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0) - 0.5 AND DateTime < DATEADD(day, DATEDIFF(day, 0, GETDATE()), 1) + 0.5
0 голосов
/ 08 августа 2011
DECLARE @NoonToday DATETIME;

SET @NoonToday = DATEADD(HOUR, 12, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP));

SELECT COUNT(*) FROM [SecureOrders]
WHERE [DateTime] >= DATEADD(DAY, -1, @NoonToday)
AND [DateTime] < @NoonToday;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...