2013-04-30 3 views
0

Извините, если это было спрошено где-то все готово, но я изо всех сил пытался найти ответ! У меня есть поле даты с указанием даты времени на активность.Getdate between times

Мне нужен запрос, который возвращает информацию только для данных, которые находятся между сегодняшней датой и событиями между 08:00 и 10:00. Мои мозги говорят, что это должно быть прямо, но я не могу его рассказать.

Благодаря

+0

Вы пытались использовать МЕЖДУ? – IndoKnight

+0

Его больше вопрос о том, как использовать функцию Getdate() 08:00:00 и getdate() 10:00:00. Мне нужно, чтобы получить текущую дату и только вернуть данные между этими двумя моментами. – GPH

ответ

1

Здесь вы идете ...

SELECT * FROM <TABLE_NAME> WHERE EVENTS_DATE BETWEEN 
DATEADD(hour, 8, DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)) 
AND 
DATEADD(hour, 10, DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)) 

Если вы используете переменную в TSQL затем сохранить текущую дату в этом

DATEADD(day, DATEDIFF(day, 0, GETDATE()) 
+0

безупречный !! Работает! Благодаря Иннок. Ночь! – GPH

+0

Добро пожаловать :) – IndoKnight

0
select ... 
where dateColumn between 
    convert(varchar(10), getdate(), 120) + 'T08:00:00' 
    and convert(varchar(10), getdate(), 120) + 'T10:00:00' 
2

Чтобы получить конкретную точку во времени я склонен использовать шаблон DATEADD/DATEDIFF. Это может выглядеть немного громоздким, но работает очень хорошо, и как только вы привыкли видеть его, он становится более удобным для чтения:

SELECT * --TODO - Pick columns 
FROM Activities 
WHERE OccurredAt BETWEEN 
    DATEADD(day,DATEDIFF(day,'20010101',GETDATE()),'2001-01-01T08:00:00') AND 
    DATEADD(day,DATEDIFF(day,'20010101',GETDATE()),'2001-01-01T10:00:00') 

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

DATEADD(day,DATEDIFF(day,'20010101',GETDATE()),'2001-01-01T08:00:00') 

Я вычисления числа (целые) дней, прошедших в период с 1 января 2001 и сейчас. Затем я добавляю, что (целое) количество дней на 08:00 1 января 2001 года, что будет, по логике, производить 08:00 сегодня.

+0

Это хорошо работает +1. Но, не уверен, как это сделать, когда формат даты по умолчанию изменяется. – IndoKnight

+0

@Indoknight - константы date/datetime, которые я показал, отформатированы так, как они есть, потому что они гарантированно работают независимо от того, какие настройки форматирования действуют (т.е. для даты без времени, «YYYYMMDD» гарантируется, что интерпретация. Для даты * с * время вы должны перейти к включению дефисов/двоеточий и использовать 'T' для разделения даты и времени. –

+0

Любая причина использовать' T' вместо пространства перед временем? Каноническая форма ODBC использует пространство. – Aryadev

Смежные вопросы