найти строки, которые попадают между днем ​​и временем недели на сервере SQL - PullRequest
1 голос
/ 05 февраля 2011

У меня есть таблица строк в MS SQL, которые содержат начальный и конечный день недели, час и время. Мне нужен запрос T-SQL, который может извлечь строки из этой таблицы, где GETDATE совпадает с днем ​​недели и временем этих строк. В частности, мне нужно, чтобы запрос работал, если в строке есть день / время, которое начинается в один день недели и заканчивается на следующий день.

Вот структура, с которой я работаю:

_start_day_of_week (int) = 5
_start_hour (int) = 15
_start_minute (int) = 30
_end_day_of_week (int) = 6
_end_hour (int) = 2
_end_minute (int) = 30
_title (string) = 'Моя строка выборки'
_id (int) = 1

Как бы я получил эту строку, учитывая текущий DATETIME?

Ответы [ 3 ]

0 голосов
/ 05 февраля 2011

Вы должны иметь возможность использовать функцию datepart для использования функции getdate:

http://msdn.microsoft.com/en-us/library/aa258265%28v=sql.80%29.aspx

0 голосов
/ 05 февраля 2011

Мне все еще неясно, каковы ваши требования, поскольку они кажутся немного непрактичными.Но вот мой путь.

DECLARE @A AS TABLE(
_start_day_of_week int,
_start_hour int,
_start_minute int,
_end_day_of_week int,
_end_hour int,
_end_minute int,
_title varchar(10),
_id int 
)
--Above is temp table for example
INSERT @A
SELECT 5,15,30,6,2,30,'SAMPLE 1', 1 UNION ALL
SELECT 6,15,30,6,17,30,'SAMPLE 2', 2

DECLARE @month int = datepart(month,getdate())
DECLARE @currentDay int = datepart(dw,getdate())
DECLARE @currentHour int = datepart(hour, getdate())
DECLARE @currentMinute int = datepart(minute, getdate())



SELECT * FROM @A --Don't use select *. This is just an example.
WHERE --Where GETDATE matches
_start_day_of_week = @currentDay --The day of week
AND
_start_hour = @currentHour --and time of those rows
AND
_start_minute = @currentMinute
--I have not done any matching against the _end columns as
--your criteria are vague. Should it exclude all days except
--the current day and the currentday+1?
-- But you would use a similar method.
0 голосов
/ 05 февраля 2011

вы можете попробовать что-то вроде:

select * from [yourtable]
where yourdatefield between getDate() and (getDate()+1 )
...