Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как получить первый понедельник в году (дата)? / 13 сообщений из 13, страница 1 из 1
21.09.2011, 14:47:52
    #37449937
Игорь1973
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить первый понедельник в году (дата)?
Добрый день.
Мне нужно на уровне запроса (в рамках Access-SQL, не кода VBA) получить дату, соответствующую первому понедельнику в году.
Т.е. для 2011 года это дата 03 января 2011 (понедельник).
Это необходимо для того, чтобы сделать список всех недель за весь год и пронумеровать их.
Первая неделя - "c 03.01.2011 по 09.01.2011" и тд.
Ни кто не подскажет, как можно получить первый понедельник?
Заранее спасибо.
...
Рейтинг: 0 / 0
21.09.2011, 15:01:39
    #37449969
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить первый понедельник в году (дата)?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
?datepart("ww", # 1 / 2 / 2011 #, vbMonday, vbFirstFullWeek)    
  52  

?datepart("ww", # 1 / 3 / 2011 #, vbMonday, vbFirstFullWeek)    
  1  

?vbMonday
  2  
?vbFirstFullWeek
  3  
...
Рейтинг: 0 / 0
21.09.2011, 15:44:14
    #37450082
mds_world
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить первый понедельник в году (дата)?
Первый понедельник в году запросом
Код: plaintext
1.
select top  1  dateserial(year(date()), 1 , 1 )+( 8 -weekday(dateserial(year(date()), 1 , 1 ), 2 )) mod  7 
from msysobjects
...
Рейтинг: 0 / 0
21.09.2011, 16:27:20
    #37450188
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить первый понедельник в году (дата)?
1. Вычисляем день недели 1 января.
2. Если это понедельник, то ответ 1 января; если вторник, то 7; если среда, то 6; и т.д.
...
Рейтинг: 0 / 0
21.09.2011, 18:17:45
    #37450439
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить первый понедельник в году (дата)?
Владимир Саныч1. Вычисляем день недели 1 января.
2. Если это понедельник, то ответ 1 января; если вторник, то 7; если среда, то 6; и т.д.
Код: plaintext
1.
2.
3.
4.
function xxx(y as integer)as date
dim n as integer
n=DatePart("w",DateSerial(y, 1 , 1 ),vbMonday)
if n= 1  then xxx=DateSerial(y, 1 , 1 ) else xxx=DateSerial(y, 1 , 9 -n)
end function
...
Рейтинг: 0 / 0
21.09.2011, 19:17:11
    #37450530
nord-woolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить первый понедельник в году (дата)?
Владимир Саныч...
Код: plaintext
1.
2.
3.
4.
...
...
...DateSerial(y, 1 , 1 )...
...DateSerial(y, 1 , 1 )... DateSerial(y, 1 , 9 -n)
...

Операция ЫТриста тридцать.
Каждому!
:)
...
Рейтинг: 0 / 0
21.09.2011, 23:25:12
    #37450827
CookieMonster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить первый понедельник в году (дата)?
Однако...

Игорь1973Добрый день.
Мне нужно на уровне запроса (в рамках Access-SQL, не кода VBA ) получить дату, соответствующую первому понедельнику в году.


Сделай источником поля запроса такое выражение
Код: plaintext
DateSerial( 2011 , 1 , 1 )+( 7 -Weekday(DateSerial( 2011 , 1 , 1 ), 3 ))
В функции DateSerial год может
- указываться прямо: 2011
- извлекаться из текущей даты, если всегда нужен только текущий год: Year(Date())
- задаваться как значение какого-то поля или инпут-бокса: [year_input]

Например, попробуй посмотреть в конструкторе и запустить такой запрос
Код: plaintext
SELECT DateSerial([year_input], 1 , 1 )+( 7 -Weekday(DateSerial([year_input], 1 , 1 ), 3 )) AS first_monday;
...
Рейтинг: 0 / 0
21.09.2011, 23:37:26
    #37450837
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить первый понедельник в году (дата)?
имхо, все "дружно" учат топикстартёра "плохому"
Игорь1973Добрый день.
Мне нужно на уровне запроса (в рамках Access-SQL, не кода VBA) получить дату, соответствующую первому понедельнику в году.
Т.е. для 2011 года это дата 03 января 2011 (понедельник).
Это необходимо для того, чтобы сделать список всех недель за весь год и пронумеровать их.
Первая неделя - "c 03.01.2011 по 09.01.2011" и тд.
Ни кто не подскажет, как можно получить первый понедельник?
Заранее спасибо.
НЕ надо ему "первый понедельник в году", не даст он ему ничего для "необходимо для того" ... ))

а нужен запрос "красивый", с "правильной" функцией
Код: plaintext
1.
2.
3.
select min(dt) as first_week_day, max(dt) as last_week_day, datepart("ww", # 1 / 2 / 2011 #,  2 ,  3 ) as week_num
from Calendar
where dt between # 1 / 1 / 2011 # and # 12 / 31 / 2011 #
group by datepart("ww", # 1 / 2 / 2011 #,  2 ,  3 )
...
Рейтинг: 0 / 0
21.09.2011, 23:39:05
    #37450839
CookieMonster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить первый понедельник в году (дата)?
Игорь1973,
только зачем самостоятельно недели нумеровать, если есть функция DatePart(interval, date[,firstdayofweek[, firstweekofyear]])?
...
Рейтинг: 0 / 0
21.09.2011, 23:39:07
    #37450840
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить первый понедельник в году (дата)?
qwerty112
Код: plaintext
1.
2.
3.
select min(dt) as first_week_day, max(dt) as last_week_day, datepart("ww", dt,  2 ,  3 ) as week_num
from Calendar
where dt between # 1 / 1 / 2011 # and # 12 / 31 / 2011 #
group by datepart("ww", dt,  2 ,  3 )
...
Рейтинг: 0 / 0
21.09.2011, 23:50:39
    #37450843
nord-woolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить первый понедельник в году (дата)?
[quot qwerty112]имхо, все "дружно" учат топикстартёра "плохому"
А сам-то, сам.
Применил VBA-шную функцию в запросе.
Даешь pure SQL! :)
...
Рейтинг: 0 / 0
21.09.2011, 23:59:14
    #37450848
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить первый понедельник в году (дата)?
nord-woolfОперация ЫТриста тридцать.
Каждому!
:)
М?
...
Рейтинг: 0 / 0
22.09.2011, 00:09:56
    #37450857
CookieMonster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить первый понедельник в году (дата)?
qwerty112имхо, все "дружно" учат топикстартёра "плохому"
НЕ надо ему "первый понедельник в году", не даст он ему ничего для "необходимо для того" ... ))

а нужен запрос "красивый", с "правильной" функцией
Код: plaintext
1.
2.
3.
select min(dt) as first_week_day, max(dt) as last_week_day, datepart("ww", # 1 / 2 / 2011 #,  2 ,  3 ) as week_num
from Calendar
where dt between # 1 / 1 / 2011 # and # 12 / 31 / 2011 #
group by datepart("ww", # 1 / 2 / 2011 #,  2 ,  3 )


нет-нет! я понял, что ему надо
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT TOP  50  DateSerial([год-то какой?], 1 , 1 )+( 7 -Weekday(DateSerial([год-то какой?], 1 , 1 ), 3 )) AS first_monday, 
CInt(DCount("id","msysobjects","id<=" & CStr([id]))) AS [counter], 
[first_monday]+ 7 *([counter]- 1 ) AS week_start, 
[first_monday]+ 7 *[counter]- 1  AS week_end, 
"Неделя №" & DatePart("ww",[week_start], 2 , 3 ) & " - с " & [week_start] & " по " & [week_end] AS expression
FROM msysobjects
ORDER BY CInt(DCount("id","msysobjects","id<=" & CStr([id])));
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как получить первый понедельник в году (дата)? / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]