Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 время  [new]
syavik
Member

Откуда:
Сообщений: 107
Всех приветствую!
Microsoft SQL Server 2000 - 8.00.760 (Intel X86) Dec 17 2002 14:22:05 Copyright (c) 1988-2003 Microsoft Corporation Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

Как мне задать вьюхе время, которое должно быть равно в одном варианте промежутку за прошлый месяц ('20090901' between '20091030') месяца, а в другом неделе с понедельника по воскресение.

Откликнитесь!
16 окт 09, 18:02    [7798734]     Ответить | Цитировать Сообщить модератору
 Re: время  [new]
Slider_spb
Member

Откуда:
Сообщений: 800
Функция DATEPART со значением weekday наверно поможет...
16 окт 09, 18:05    [7798745]     Ответить | Цитировать Сообщить модератору
 Re: время  [new]
Glory
Member

Откуда:
Сообщений: 104760
syavik


Как мне задать вьюхе время, которое должно быть равно в одном варианте промежутку за прошлый месяц ('20090901' between '20091030') месяца, а в другом неделе с понедельника по воскресение.

И как представление узнает, по какому варианту ему работать ?
16 окт 09, 18:06    [7798747]     Ответить | Цитировать Сообщить модератору
 Re: время  [new]
syavik
Member

Откуда:
Сообщений: 107
Glory,

Мне просто нужно в двух исполнениях, это разные вьюхи, но вопрос однотипный. Можно попросить небольшой примерчик?
16 окт 09, 18:07    [7798752]     Ответить | Цитировать Сообщить модератору
 Re: время  [new]
syavik
Member

Откуда:
Сообщений: 107
Slider_spb,

Можешь привести небольшой пример относительно прошлой недели?
16 окт 09, 18:10    [7798759]     Ответить | Цитировать Сообщить модератору
 Re: время  [new]
iljy
Member

Откуда:
Сообщений: 8711
syavik,
select dateadd(d, -datepart(dw, getdate()) - 5, getdate()),
dateadd(d, -datepart(dw, getdate()) + 1, getdate())
16 окт 09, 18:21    [7798822]     Ответить | Цитировать Сообщить модератору
 Re: время  [new]
baracs
Member

Откуда: Москва
Сообщений: 7198
syavik
Можешь привести небольшой пример относительно прошлой недели?

можно так
WHERE DATEPART(yyyy, [date]) = 2009 AND DATEPART(wk, [date]) = DATEPART(wk, GETDATE()) - 1
16 окт 09, 18:26    [7798851]     Ответить | Цитировать Сообщить модератору
 Re: время  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
рекомендую автору не забывать про это:
set nocount on
set language русский
select datepart(dw, getdate()) as [русский]
set language us_english
select datepart(dw, getdate()) as [us_english]

Changed language setting to русский.
русский
-----------
5

Changed language setting to us_english.
us_english
-----------
6
16 окт 09, 18:27    [7798854]     Ответить | Цитировать Сообщить модератору
 Re: время  [new]
syavik
Member

Откуда:
Сообщений: 107
iljy,

Супер! для недели сработало!
16 окт 09, 18:29    [7798862]     Ответить | Цитировать Сообщить модератору
 Re: время  [new]
baracs
Member

Откуда: Москва
Сообщений: 7198
baracs,

и еще
SET DATEFIRST = 1
16 окт 09, 18:29    [7798864]     Ответить | Цитировать Сообщить модератору
 Re: время  [new]
syavik
Member

Откуда:
Сообщений: 107
baracs,

пример под
SET DATEFIRST = 7
написан.
16 окт 09, 18:32    [7798871]     Ответить | Цитировать Сообщить модератору
 Re: время  [new]
syavik
Member

Откуда:
Сообщений: 107
А с прошлым месяцем как быть?
16 окт 09, 18:32    [7798875]     Ответить | Цитировать Сообщить модератору
 Re: время  [new]
syavik
Member

Откуда:
Сообщений: 107
syavik
baracs,

пример под
SET DATEFIRST = 7
написан.



Это я про пример ilja
16 окт 09, 18:33    [7798882]     Ответить | Цитировать Сообщить модератору
 Re: время  [new]
syavik
Member

Откуда:
Сообщений: 107
baracs,

Спасибо, такой вариант с неделей тоже подходит!
16 окт 09, 18:37    [7798894]     Ответить | Цитировать Сообщить модератору
 Re: время  [new]
iljy
Member

Откуда:
Сообщений: 8711
syavik
baracs,

Спасибо, такой вариант с неделей тоже подходит!

только на нем индекс работать не будет.

с прошлым месяцем - почти аналогично
select dateadd(m, datediff(m, 0, getdate()) - 1, 0),
	   dateadd(m, datediff(m, 0, getdate()), 0) - 1
16 окт 09, 19:08    [7799040]     Ответить | Цитировать Сообщить модератору
 Re: время  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Записи с датой [Date] принадлежат прошлой неделе (независимо ни от чего!), если
WHERE [Date] BETWEEN DATEADD(DAY, DATEDIFF(DAY,0, GETDATE())/7*7-7,0) AND DATEADD(DAY, DATEDIFF(DAY,0, GETDATE())/7*7-1,0);

Предполагается, что неделя начинается в понедельник...
16 окт 09, 19:14    [7799066]     Ответить | Цитировать Сообщить модератору
 Re: время  [new]
syavik
Member

Откуда:
Сообщений: 107
iljy,

Забавно, при Вашем варианте получается (185 row(s) affected)
Если указать даты вручную - (195 row(s) affected)
при
where
BETWEEN DATEADD(DAY, DATEDIFF(DAY,0, GETDATE())/7*7-7,0) AND DATEADD(DAY, DATEDIFF(DAY,0, GETDATE())/7*7-1,0);
(195 row(s) affected)


Почему интересно извлекается на 10 записей меньше? =)
19 окт 09, 12:24    [7804396]     Ответить | Цитировать Сообщить модератору
 Re: время  [new]
syavik
Member

Откуда:
Сообщений: 107
iap,

А как это перенести на месяц? чтобы показывал за прошлый месяц?
19 окт 09, 12:25    [7804409]     Ответить | Цитировать Сообщить модератору
 Re: время  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
DECLARE @t TABLE(a DATETIME)

INSERT INTO @t(a)
SELECT '20091001' UNION ALL
SELECT '20090901' UNION ALL
SELECT '20090911' UNION ALL
SELECT '20081001' 

SELECT a FROM @t WHERE (MONTH(a)=MONTH(GetDate())-1 AND YEAR(a)=YEAR(GetDate())) 
OR (MONTH(GetDate())=1 AND MONTH(a)=12 AND YEAR(a)+1=YEAR(GetDate()))

Как-то так для примера...

---------------------------------------------------------
- Ну вы тут и нафлудили! - сказал Геракл, зайдя на Авгиев форум..
19 окт 09, 12:32    [7804458]     Ответить | Цитировать Сообщить модератору
 Re: время  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
syavik
iap,

А как это перенести на месяц? чтобы показывал за прошлый месяц?
Вроде уже было тут?
WHERE [Date]>=DATEADD(MONTH, DATEDIFF(MONTH,0, GETDATE())-1,0)
  AND [Date]< DATEADD(MONTH, DATEDIFF(MONTH,0, GETDATE()),0);
19 окт 09, 12:33    [7804468]     Ответить | Цитировать Сообщить модератору
 Re: время  [new]
iljy
Member

Откуда:
Сообщений: 8711
syavik,

а даты одинаковые получаются?

с месяцем -
select dateadd(m, datediff(m, 0, getdate()) - 1, 0),
	   dateadd(m, datediff(m, 0, getdate()), 0) - 1
19 окт 09, 12:34    [7804472]     Ответить | Цитировать Сообщить модератору
 Re: время  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Кстати говоря, если в поле [Date] хранится ненулевое время, то мой ответ про прошлую неделю надо уточнить:
WHERE [Date]>=DATEADD(DAY, DATEDIFF(DAY,0, GETDATE())/7*7-7,0)
  AND [Date]< DATEADD(DAY, DATEDIFF(DAY,0, GETDATE())/7*7,0);
19 окт 09, 12:37    [7804495]     Ответить | Цитировать Сообщить модератору
 Re: время  [new]
syavik
Member

Откуда:
Сообщений: 107
iljy,

Даты получаются одинаковые, но не хватает в последний день 10 записей
19 окт 09, 12:49    [7804613]     Ответить | Цитировать Сообщить модератору
 Re: время  [new]
syavik
Member

Откуда:
Сообщений: 107
iap
syavik
iap,

А как это перенести на месяц? чтобы показывал за прошлый месяц?
Вроде уже было тут?
WHERE [Date]>=DATEADD(MONTH, DATEDIFF(MONTH,0, GETDATE())-1,0)
  AND [Date]< DATEADD(MONTH, DATEDIFF(MONTH,0, GETDATE()),0);


Срослось, спасибки!
19 окт 09, 12:58    [7804704]     Ответить | Цитировать Сообщить модератору
 Re: время  [new]
syavik
Member

Откуда:
Сообщений: 107
iljy
syavik,

а даты одинаковые получаются?

с месяцем -
select dateadd(m, datediff(m, 0, getdate()) - 1, 0),
	   dateadd(m, datediff(m, 0, getdate()), 0) - 1


Тут он тоже урезает последние числа =(( Странно как-то...
19 окт 09, 12:59    [7804714]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить