powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Последний день месяца
21 сообщений из 21, страница 1 из 1
Последний день месяца
    #32621216
inwin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, подскажите как поставить
условие в запросе на последний день текущего месяца?

Например Select поле1, поле2 From tabl1 where поле1 = "Последний день текущего месяца"
...
Рейтинг: 0 / 0
Последний день месяца
    #32621230
Yanis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
Select [поле1], [поле2] From tabl1 where [поле1]=format(DateSerial(Year(Date()),Month(Date())+ 1 , 0 ), "mm\/dd\/yy")
...
Рейтинг: 0 / 0
Последний день месяца
    #32621238
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Только format тут лишний.
...
Рейтинг: 0 / 0
Последний день месяца
    #32621244
Yanis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точно, мне почему-то показалось что DateSerial возвращает String а не Date
...
Рейтинг: 0 / 0
Последний день месяца
    #32621249
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Если бы он возвращал стринг, то форматировать надо было бы то, что слева от знака равенства. :^)
...
Рейтинг: 0 / 0
Последний день месяца
    #32621260
stag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот в хелпе про DateSerial написано:
"Значение каждого аргумента функции DateSerial должно лежать в соответствующем диапазоне: 1 — 31 для дней и 1 — 12 для месяцев. Кроме того, можно использовать числовые выражения для описания относительной даты, т.е. на определенное число дней, месяцев и лет более поздней или ранней, чем указанная."
насколько я понимаю, числовые выражения для описания относительной даты - например "месяц-1", "день + 1". А что значит ноль в таком выражении (DateSerial(Year(Date()),Month(Date())+1,0)?
...
Рейтинг: 0 / 0
Последний день месяца
    #32621272
Alexey Sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда DateSerial(Year(Date()),Month(Date())+1,1)-1
...
Рейтинг: 0 / 0
Последний день месяца
    #32621283
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
stagВот в хелпе про DateSerial написано:
"Значение каждого аргумента функции DateSerial должно лежать в соответствующем диапазоне: 1 — 31 для дней и 1 — 12 для месяцев. Кроме того, можно использовать числовые выражения для описания относительной даты, т.е. на определенное число дней, месяцев и лет более поздней или ранней, чем указанная."
насколько я понимаю, числовые выражения для описания относительной даты - например "месяц-1", "день + 1". А что значит ноль в таком выражении (DateSerial(Year(Date()),Month(Date())+1,0)?
Но DateSerial корректно работает и при "нелегальных" значениях параметров.
...
Рейтинг: 0 / 0
Последний день месяца
    #32621285
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Alexey ShТогда DateSerial(Year(Date()),Month(Date())+1,1)-1
И плюс что-то на случай, когда Month(Date())+1 даст 13. :^)
...
Рейтинг: 0 / 0
Последний день месяца
    #32621295
Yanis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stagА что значит ноль в таком выражении (DateSerial(Year(Date()),Month(Date())+1,0)?Это значит что функция вернет -1 от следующего месяца. Конструкция работает, проверь
...
Рейтинг: 0 / 0
Последний день месяца
    #32621296
stag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот именно, что работает корректно - для данной задачи. Хотелось бы знать, кроме этого конкретного случая, как это будет работать (всегда как -1?). Или это только методом тыка можно узнать?
...
Рейтинг: 0 / 0
Последний день месяца
    #32621303
Yanis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stagвот именно, что работает корректно - для данной задачи. Хотелось бы знать, кроме этого конкретного случая, как это будет работать (всегда как -1?). Или это только методом тыка можно узнать?Я DateSerial часто мучаю некорректными параметрами, пока глюков замечено не было. Все время что-то возвращает, причем так как надо
...
Рейтинг: 0 / 0
Последний день месяца
    #32621305
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
stagвот именно, что работает корректно - для данной задачи. Хотелось бы знать, кроме этого конкретного случая, как это будет работать (всегда как -1?). Или это только методом тыка можно узнать?
Всегда работает так, как и ожидается. Если тот параметр, который день, уменьшить на Х дней, то и получится на Х дней раньше.

Проблема может возникнуть в будущих версиях Аксесса, если Майкрософт решит запретить такие вещи. На этот случай вот сверхкорректное решение:

dateadd("d",-1,dateadd("m",1,dateserial(year(date),month(date),1)))
...
Рейтинг: 0 / 0
Последний день месяца
    #32621349
stag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
извините за непонятливость:-( ВСВсегда работает так, как и ожидается. - так я и спрашиваю, как ожидается. ВСЕсли тот параметр, который день, уменьшить на Х дней, то и получится на Х дней раньше.
- по-моему, это как раз корректные параметры... А вот что ожидается от нуля - я не пойму. Почему если вместо дня написать 0, получится "день-1"? Вы так всегда пользуетесь, и, например, вместо "месяц-1"? Как-то странно...
...
Рейтинг: 0 / 0
Последний день месяца
    #32621363
Yanis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нулевой день следующего месяца = последний день текущего
...
Рейтинг: 0 / 0
Последний день месяца
    #32621368
stag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычПроблема может возникнуть в будущих версиях Аксесса, если Майкрософт решит запретить такие вещи. На этот случай вот сверхкорректное решение:

dateadd("d",-1,dateadd("m",1,dateserial(year(date),month(date),1)))
по-моему, вот это проще: DateAdd("m", 1, Date) - Day(Date)
...
Рейтинг: 0 / 0
Последний день месяца
    #32621401
stag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YanisНулевой день следующего месяца = последний день текущего
а минус первый день - на самом деле минус второй... то есть предпоследний. нда... так-то вот хелпом пользоваться - мне было бы очень удивительно, что у меня "день -1" или даже просто "-1" выдает не то, что я жду (по моей логике это был бы как раз последний день текущего месяца, то есть следующий месяц минус один день):-)
...
Рейтинг: 0 / 0
Последний день месяца
    #32621437
Yanis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stag YanisНулевой день следующего месяца = последний день текущего
а минус первый день - на самом деле минус второй... то есть предпоследний. нда... так-то вот хелпом пользоваться - мне было бы очень удивительно, что у меня "день -1" или даже просто "-1" выдает не то, что я жду (по моей логике это был бы как раз последний день текущего месяца, то есть следующий месяц минус один день):-)А это потому что в хелпе написано
stag"Значение каждого аргумента функции DateSerial должно лежать в соответствующем диапазоне: 1 — 31 для дней и 1 — 12 для месяцев""0" является таким же числом, как и "-1", и никто его из целых чисел не исключал. Так что ничего удивительного нет...
...
Рейтинг: 0 / 0
Последний день месяца
    #32621450
Yanis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У нас есть три решения:
DateSerial(Year(Date()),Month(Date())+1,0)
dateadd("d",-1,dateadd("m",1,dateserial(year(date),month(date),1)))
DateAdd("m", 1, Date) - Day(Date)
Никто не хочет для полноты картины измерить скорость выполнения каждого из них? Было бы занятно...
...
Рейтинг: 0 / 0
Последний день месяца
    #32621709
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
stagизвините за непонятливость:-( ВСВсегда работает так, как и ожидается. - так я и спрашиваю, как ожидается. ВСЕсли тот параметр, который день, уменьшить на Х дней, то и получится на Х дней раньше.
- по-моему, это как раз корректные параметры... А вот что ожидается от нуля - я не пойму. Почему если вместо дня написать 0, получится "день-1"? Вы так всегда пользуетесь, и, например, вместо "месяц-1"? Как-то странно...
Пример.

?dateserial(2004,7,1)
01/07/2004
?dateserial(2004,7,0)
30/06/2004
?dateserial(2004,7,-1)
29/06/2004
?dateserial(2004,7,-2)
28/06/2004

Каждый раз уменьшаем параметр, отвечающий за день, на 1 и получаем дату меньше на 1.
...
Рейтинг: 0 / 0
Последний день месяца
    #32621720
stag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо, Yanis, Владимир Саныч. Так - значит, так. Буду теперь знать (просто по разным другим функциям аксесса привычка, что ноль в таких случаях вообще не используется).
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Последний день месяца
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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