Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Последний день месяца / 21 сообщений из 21, страница 1 из 1
26.07.2004, 14:04:37
    #32621216
inwin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последний день месяца
Господа, подскажите как поставить
условие в запросе на последний день текущего месяца?

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

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

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

dateadd("d",-1,dateadd("m",1,dateserial(year(date),month(date),1)))
по-моему, вот это проще: DateAdd("m", 1, Date) - Day(Date)
...
Рейтинг: 0 / 0
26.07.2004, 15:10:34
    #32621401
stag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последний день месяца
YanisНулевой день следующего месяца = последний день текущего
а минус первый день - на самом деле минус второй... то есть предпоследний. нда... так-то вот хелпом пользоваться - мне было бы очень удивительно, что у меня "день -1" или даже просто "-1" выдает не то, что я жду (по моей логике это был бы как раз последний день текущего месяца, то есть следующий месяц минус один день):-)
...
Рейтинг: 0 / 0
26.07.2004, 15:19:52
    #32621437
Yanis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последний день месяца
stag YanisНулевой день следующего месяца = последний день текущего
а минус первый день - на самом деле минус второй... то есть предпоследний. нда... так-то вот хелпом пользоваться - мне было бы очень удивительно, что у меня "день -1" или даже просто "-1" выдает не то, что я жду (по моей логике это был бы как раз последний день текущего месяца, то есть следующий месяц минус один день):-)А это потому что в хелпе написано
stag"Значение каждого аргумента функции DateSerial должно лежать в соответствующем диапазоне: 1 — 31 для дней и 1 — 12 для месяцев""0" является таким же числом, как и "-1", и никто его из целых чисел не исключал. Так что ничего удивительного нет...
...
Рейтинг: 0 / 0
26.07.2004, 15:22:39
    #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
26.07.2004, 16:57:27
    #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
26.07.2004, 17:03:04
    #32621720
stag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последний день месяца
спасибо, Yanis, Владимир Саныч. Так - значит, так. Буду теперь знать (просто по разным другим функциям аксесса привычка, что ноль в таких случаях вообще не используется).
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Последний день месяца / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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