Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Даты с Monday по Friday прошлой недели.  [new]
sanek118
Guest
Как сделать выборку дат с Monday по Friday прошлой недели.

т.е. если сегодня 12/18/2012, то надо между 12/10/12 -- 12/14/12.
18 дек 12, 18:42    [13650495]     Ответить | Цитировать Сообщить модератору
 Re: Даты с Monday по Friday прошлой недели.  [new]
hallabud
Member

Откуда: Киев
Сообщений: 245
можно так
DECLARE @days INT;
DECLARE @lastweekdates TABLE (Date1 DATETIME);
DECLARE @datescount INT;
SET @datescount = 0;
SET @days = 5 + datepart(weekday,getdate());

WHILE @datescount < 5
BEGIN
INSERT INTO @lastweekdates
SELECT dateadd(day,-@days,getdate());
SET @days = @days - 1;
SET @datescount = @datescount + 1;
END;
SELECT CONVERT(VARCHAR,Date1,103) FROM @lastweekdates;
18 дек 12, 19:17    [13650609]     Ответить | Цитировать Сообщить модератору
 Re: Даты с Monday по Friday прошлой недели.  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
SELECT *
FROM T
WHERE D>=DATEADD(DAY,DATEDIFF(DAY,0,CURRENT_TIMESTAMP)/7*7-7,0)
  AND D< DATEADD(DAY,DATEDIFF(DAY,0,CURRENT_TIMESTAMP)/7*7-1,0);
18 дек 12, 21:40    [13651092]     Ответить | Цитировать Сообщить модератору
 Re: Даты с Monday по Friday прошлой недели.  [new]
Гость333
Member

Откуда:
Сообщений: 3683
hallabud
можно так

Неа, нельзя. Поставьте перед вашим фрагментом кода "SET LANGUAGE Russian" или "SET DATEFIRST 3" и проверьте результат.
19 дек 12, 09:02    [13651969]     Ответить | Цитировать Сообщить модератору
 Re: Даты с Monday по Friday прошлой недели.  [new]
stepanet
Member

Откуда:
Сообщений: 27
если таблица с датами есть можно так попробывать

select * from
table
where datepart(week,Date) = (datepart(week,getdate())-1)
and datepart(yy,Date) = datepart(yy,getdate())
19 дек 12, 11:26    [13652754]     Ответить | Цитировать Сообщить модератору
 Re: Даты с Monday по Friday прошлой недели.  [new]
stepanet
Member

Откуда:
Сообщений: 27
stepanet
если таблица с датами есть можно так попробывать

select * from
table
where datepart(week,Date) = (datepart(week,getdate())-1)
and datepart(yy,Date) = datepart(yy,getdate())


торможу :) нужны же только рабочие дни..значит не пойдет
19 дек 12, 11:28    [13652769]     Ответить | Цитировать Сообщить модератору
 Re: Даты с Monday по Friday прошлой недели.  [new]
stepanet
Member

Откуда:
Сообщений: 27
iap
SELECT *
FROM T
WHERE D>=DATEADD(DAY,DATEDIFF(DAY,0,CURRENT_TIMESTAMP)/7*7-7,0)
  AND D< DATEADD(DAY,DATEDIFF(DAY,0,CURRENT_TIMESTAMP)/7*7-1,0);

select DATEADD(DAY,DATEDIFF(DAY,0,CURRENT_TIMESTAMP)/7*7-7,0)
select DATEADD(DAY,DATEDIFF(DAY,0,CURRENT_TIMESTAMP)/7*7-1,0);

выдают
10.12.2012 0:00:00.000
16.12.2012 0:00:00.000
19 дек 12, 11:31    [13652788]     Ответить | Цитировать Сообщить модератору
 Re: Даты с Monday по Friday прошлой недели.  [new]
stepanet
Member

Откуда:
Сообщений: 27
iap
SELECT *
FROM T
WHERE D>=DATEADD(DAY,DATEDIFF(DAY,0,CURRENT_TIMESTAMP)/7*7-7,0)
  AND D< DATEADD(DAY,DATEDIFF(DAY,0,CURRENT_TIMESTAMP)/7*7-[color=red]3[/color],0);
19 дек 12, 11:35    [13652812]     Ответить | Цитировать Сообщить модератору
 Re: Даты с Monday по Friday прошлой недели.  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
stepanet
iap
SELECT *
FROM T
WHERE D>=DATEADD(DAY,DATEDIFF(DAY,0,CURRENT_TIMESTAMP)/7*7-7,0)
  AND D< DATEADD(DAY,DATEDIFF(DAY,0,CURRENT_TIMESTAMP)/7*7-[color=red]3[/color],0);
Неправильно. Тогда уж так:
SELECT *
FROM T
WHERE D>=DATEADD(DAY,DATEDIFF(DAY,0,CURRENT_TIMESTAMP)/7*7-7,0)
  AND D< DATEADD(DAY,DATEDIFF(DAY,0,CURRENT_TIMESTAMP)/7*7-2,0);
19 дек 12, 12:02    [13652998]     Ответить | Цитировать Сообщить модератору
 Re: Даты с Monday по Friday прошлой недели.  [new]
super-code
Member

Откуда:
Сообщений: 244
как узнать с какого по какое число будет идти последняя неделя этого месяца? Без циклов.
19 дек 12, 12:09    [13653045]     Ответить | Цитировать Сообщить модератору
 Re: Даты с Monday по Friday прошлой недели.  [new]
aleks2
Guest
super-code
как узнать с какого по какое число будет идти последняя неделя этого месяца? Без циклов.

А что есть для вас "последняя неделя месяца"?
19 дек 12, 12:19    [13653130]     Ответить | Цитировать Сообщить модератору
 Re: Даты с Monday по Friday прошлой недели.  [new]
aleks2
Guest
declare @now datetime;
set @now = datediff(day, 0, getdate());

set datefirst 1

select @now [now]
     , dateadd(weekday, 1-datepart(weekday, @now), @now) as [1st]
     , dateadd(day, 6, dateadd(weekday, 1-datepart(weekday, @now), @now)) as [last]


set datefirst 2

select @now [now]
     , dateadd(weekday, 1-datepart(weekday, @now), @now) as [1st]
     , dateadd(day, 6, dateadd(weekday, 1-datepart(weekday, @now), @now)) as [last]

set datefirst 3

select @now [now]
     , dateadd(weekday, 1-datepart(weekday, @now), @now) as [1st]
     , dateadd(day, 6, dateadd(weekday, 1-datepart(weekday, @now), @now)) as [last]
19 дек 12, 12:29    [13653206]     Ответить | Цитировать Сообщить модератору
 Re: Даты с Monday по Friday прошлой недели.  [new]
super-code
Member

Откуда:
Сообщений: 244
aleks2, недель в месяце бывает 4 или 5, последняя неделя обычно неполная, например в этом месяце последняя неделя 5-я и в ней всего один день, т.е. с 31 по 31.
19 дек 12, 13:03    [13653515]     Ответить | Цитировать Сообщить модератору
 Re: Даты с Monday по Friday прошлой недели.  [new]
Гость333
Member

Откуда:
Сообщений: 3683
super-code
в этом месяце последняя неделя 5-я и в ней всего один день, т.е. с 31 по 31.

А первое и второе декабря к какой неделе относятся? К нулевой?
19 дек 12, 13:22    [13653715]     Ответить | Цитировать Сообщить модератору
 Re: Даты с Monday по Friday прошлой недели.  [new]
календарь
Guest
super-code
aleks2, недель в месяце бывает 4 или 5, последняя неделя обычно неполная, например в этом месяце последняя неделя 5-я и в ней всего один день, т.е. с 31 по 31.



declare 
	@now					date
	, @last_date_of_month	date

set 
	@now = cast(getdate() as date)
set 
	@last_date_of_month = dateadd(dd, -1, dateadd(mm, 1, dateadd(mm, datediff(mm, 0, @now), 0)))	


set datefirst 1

select	
	[1st] = dateadd(DD, -datepart(weekday, @last_date_of_month), @last_date_of_month)
	, [last] = @last_date_of_month


set datefirst 2

select	
	[1st] = dateadd(DD, -datepart(weekday, @last_date_of_month), @last_date_of_month)
	, [last] = @last_date_of_month

set datefirst 3

select	
	[1st] = dateadd(DD, -datepart(weekday, @last_date_of_month), @last_date_of_month)
	, [last] = @last_date_of_month
19 дек 12, 13:40    [13653925]     Ответить | Цитировать Сообщить модератору
 Re: Даты с Monday по Friday прошлой недели.  [new]
календарь
Guest
fixed
календарь
super-code
aleks2, недель в месяце бывает 4 или 5, последняя неделя обычно неполная, например в этом месяце последняя неделя 5-я и в ней всего один день, т.е. с 31 по 31.



declare 
	@now					date
	, @last_date_of_month	date

set 
	@now = cast(getdate() as date)
set 
	@last_date_of_month = dateadd(dd, -1, dateadd(mm, 1, dateadd(mm, datediff(mm, 0, @now), 0)))	


set datefirst 1

select	
	[1st] = dateadd(DD, 1-datepart(weekday, @last_date_of_month), @last_date_of_month)
	, [last] = @last_date_of_month


set datefirst 2

select	
	[1st] = dateadd(DD, 1-datepart(weekday, @last_date_of_month), @last_date_of_month)
	, [last] = @last_date_of_month

set datefirst 3

select	
	[1st] = dateadd(DD, 1-datepart(weekday, @last_date_of_month), @last_date_of_month)
	, [last] = @last_date_of_month
19 дек 12, 13:42    [13653944]     Ответить | Цитировать Сообщить модератору
 Re: Даты с Monday по Friday прошлой недели.  [new]
super-code
Member

Откуда:
Сообщений: 244
календарь, класс!
19 дек 12, 17:11    [13655597]     Ответить | Цитировать Сообщить модератору
 Re: Даты с Monday по Friday прошлой недели.  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
sanek118
Как сделать выборку дат с Monday по Friday прошлой недели

а мне вот не очевидно, что Monday на неделе наступает раньше Friday )
19 дек 12, 17:20    [13655653]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить