Округление DateTime в SQL - PullRequest
2 голосов
/ 08 мая 2020

У меня есть данные DateTime в базе данных MS SQL в следующем формате:

2020-05-07 22:35:00

Я пытаюсь создать запрос, который захватывает данные только за последние 24 часа операций. Однако наши операционные KPI измеряются с 6:00 до 6:00. Я хочу округлить дату по времени. Все, что было до 6 утра, будет считаться накануне.

2020-05-07 05:45:00 -> 2020-05-06 (Before 6AM)
2020-05-07 06:30:00 -> 2020-05-07 (After 6AM)

До сих пор мне удавалось получить данные об активности за предыдущие дни, но я изо всех сил пытаюсь сдвинуть временные рамки, чтобы округлить что-либо до 6 утра

SELECT 
      end_date 
FROM data sint
WHERE sint.end_date >= dateadd(day,datediff(day,1,GETDATE()),0)
AND sint.end_date < dateadd(day,datediff(day,0,GETDATE()),0)

Ответы [ 3 ]

1 голос
/ 08 мая 2020

сначала получите временную часть. Сравните время с 6 часами утра и запустите выражение.

В приведенном ниже коде время сравнивается с датой «1900-01-01 06:00:00», которая в формате даты по умолчанию составляет 6 часов утра.

select 
  case when cast(date as time(0)) < '1900-01-01 06:00:00' 
       then cast(date - 1 as date) 
            else cast(date as date) 
  end as newdate
  from temp_date;
1 голос
/ 08 мая 2020

Вы можете добавить шесть часов к текущей дате (без времени) для сравнения:

where int.end_date < dateadd(hour, 6, convert(datetime, convert(date, getdate()))) and
      int.end_date >= dateadd(hour, 6 - 24, convert(datetime, convert(date, getdate())))

Обратите внимание, что преобразование в date удаляет компонент времени.

0 голосов
/ 08 мая 2020

Я бы сделал то же самое, что и Гордон, только с противоположной стороны.

Я бы вычел 6 часов из end_date и затем сравнил.

where convert(date, dateadd(hour, -6, int.end_date)) = convert(date, getdate())

Хотя этот метод может не сработать, если вы на самом деле используем getdate(). Он ничего не вернет, если запускается с полуночи до 6 часов утра (если у вас нет даты в будущем).

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