Есть ли способ получить текущее время и минуты из SQL для сравнения с датой? - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь сравнить столбец datetime с текущим временем до минут. Однако я могу сравнить его только с днями следующим образом:

SELECT *
FROM ScheduleTable
WHERE YEAR(CURRENT_TIMESTAMP)  = YEAR(schedule)
AND   MONTH(CURRENT_TIMESTAMP) = MONTH(schedule)
AND   DAY(CURRENT_TIMESTAMP)   = DAY(schedule)

Итак, можно ли сравнивать часы и минуты?

Ответы [ 4 ]

1 голос
/ 31 января 2020

Если предположить, что столбец schedule является датой-временем, вторая и миллисекундная части которого всегда равны нулю, вы можете просто обнулить секунды и миллисекунды текущей временной метки для сравнения:

WHERE schedule = DATEADD(minute, DATEDIFF(minute, 0, CURRENT_TIMESTAMP), 0)

Если вторая и миллисекундная части Столбец schedule может быть ненулевым, тогда используйте вместо этого логики c:

WHERE schedule >= DATEADD(minute, DATEDIFF(minute, 0, CURRENT_TIMESTAMP), 0)
AND   schedule <  DATEADD(minute, DATEDIFF(minute, 0, CURRENT_TIMESTAMP) + 1, 0)

Выражение дает этот результат .

1 голос
/ 31 января 2020

В течение нескольких часов и минут просто нет функции «ярлыка», которую вы можете использовать - вам нужно прибегнуть к использованию DATEPART:

SELECT * 
FROM ScheduleTable 
WHERE YEAR(CURRENT_TIMESTAMP) = YEAR(schedule) 
  AND MONTH(CURRENT_TIMESTAMP) = MONTH(schedule) 
  AND DAY(CURRENT_TIMESTAMP) = DAY(schedule)
  AND DATEPART(HOUR, CURRENT_TIMESTAMP) = DATEPART(HOUR, schedule)
  AND DATEPART(MINUTE, CURRENT_TIMESTAMP) = DATEPART(MINUTE, schedule)

См. официальную запись MS docs для DATEPART для более подробной информации

0 голосов
/ 31 января 2020

Вы можете использовать функцию NOW(). Возвращает значение текущей даты и времени в формате YYYY-MM-DD HH:MM:SS или YYYYMMDDHHMMSS.uuuuuu в зависимости от контекста (цифра c или строка) функции.

Чтобы получить указанную c часть дата, которую вы можете использовать DATEPART (Transact- SQL)

Синтаксис: DATEPART(interval, date)

0 голосов
/ 31 января 2020

Попробуйте:

SELECT * FROM ScheduleTable WHERE DATEPART(YEAR,schedule) = DATEPART(YEAR,GETDATE()) AND 
    DATEPART(MONTH,schedule) = DATEPART(MONTH,GETDATE()) AND 
    DATEPART(DAY,schedule) = DATEPART(DAY,GETDATE())
...