2012-01-23 3 views
0

У меня есть таблицаВЫБРАТЬ запрос в SQL Server

ID | DATE 
1 | 16-01-2012 
2 | 17-01-2012 
3 | 18-01-2012 
4 | 22-01-2012 
5 | 28-01-2012 
6 | 02-02-2012 

Моя задача:

У меня есть date переменную, которая инициализируется 16-01-2012 и я должен найти все строки, которые находятся в континууме с 16-01-2012 т.е. 17-01-2012 и 18-01-2012.

Пожалуйста, помогите.

ответ

6

Одним из возможных вариантов было бы использовать hierarchical query как следующее:

with data (id, date) 
as 
(
    select id, date from yourtable where date = '16-01-2012' 
    UNION ALL 
    select t.id, t.date 
    from yourtable t 
    inner join data d 
     on DATEDIFF(dd, d.date, t.date) = 1 
    -- 1 day difference 
) 
select 
    * 
from 
    data 
; 

Я не имею сервера SQL здесь, чтобы попробовать это, так что может быть некоторые ошибки в заявлении. Это должно дать вам идею.

+2

по DATEDIFF (dd, t.Date, d.Date) = -1 –

+0

@AdrianIftode: Спасибо. Не просто ли вычитание работает на SQL-сервере? –

+0

Нет. Ваш код работал нормально, но вычитания не было. –

-1

Попробуйте это:

select id, date 
from table 
where date > date_from_variable 

только думаю, что у вас есть самолет, чтобы сделать, чтобы бросить вашу переменную в нужный формат даты.

образец:

cast(date_from_variable, smalldate) 
+0

-1: Это возвращает все элементы, которые больше указанной переменной, независимо от того, существует или нет промежуток между ними. –