powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Последняя дата месяца
25 сообщений из 57, страница 2 из 3
Последняя дата месяца
    #39911005
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишка
Код: plsql
1.
 Join Таблица_с_чо_надо 




а хотелось бы без джойнов, вдруг пользователь не будет использовать параметры поиска по дате, к тому же полей по дате может быть несколько
...
Рейтинг: 0 / 0
Последняя дата месяца
    #39911006
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишка
Вот эта тенденция меня и смущает. Обилие условно полезных возможностей подталкивает людей к полуумственной активности по поиску кусков чьего-то кода,


предлагаю вернуться к ассэмблеру
...
Рейтинг: 0 / 0
Последняя дата месяца
    #39911008
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишкаА может, так и надо? Может, в этом и есть великая сермяжная правда?

не думаю. Несмотря на то что функция DATEADD имеет немного громоздкий синтаксис она делает код понятным и читаемым. Если делать по старинке, то добавление к дате некой дроби надо ещё и пояснять комментариями, потому как через 3 года и не вспомнишь чего там хотел добавить.

З.Ы. Сам по себе производственный календарь вещь полезная, но как по мне он должен применяться в куда более сложных случаях нежели начало и конец месяца.
...
Рейтинг: 0 / 0
Последняя дата месяца
    #39911009
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис

З.Ы. Сам по себе производственный календарь вещь полезная, но как по мне он должен применяться в куда более сложных случаях нежели начало и конец месяца.


О них, пользуясь календарём, можно просто забыть. Если говорить о вхождении даты в период. А если нужна информация точно на этот день и заранее не знаешь на какой, то извлечь эту дату оттуда.
...
Рейтинг: 0 / 0
Последняя дата месяца
    #39911011
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11

а хотелось бы без джойнов, вдруг пользователь не будет использовать параметры поиска по дате, к тому же полей по дате может быть несколько


Ой, и не говори. От этих джойнов один гемор. Самая вредная вещь - справочник номенклатуры. Надо в каждую строку в документах вбивать названия. А то вдруг пользователь не будет использовать условие по номенклатуре.
...
Рейтинг: 0 / 0
Последняя дата месяца
    #39911015
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Последняя дата месяца
    #39911016
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы получить записи за месяц (текущий или прошлый, например) , то можно ж ещё так написать?

текущий месяц
Код: sql
1.
2.
3.
4.
WHERE
...
AND
 (EXTRACT(MONTH FROM MY_DATE_FIELD) = EXTRACT(MONTH FROM CURRENT_DATE)) 




предыдущий месяц
Код: sql
1.
2.
AND
 (EXTRACT(MONTH FROM MY_DATE_FIELD) = EXTRACT(MONTH FROM CURRENT_DATE) - 1)
...
Рейтинг: 0 / 0
Последняя дата месяца
    #39911031
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
предыдущий месяц


вот так правильно
Код: sql
1.
EXTRACT(MONTH FROM DATEADD(-1 MONTH TO DATE '2020-01-20'))



иначе в первом варианте будет 0, а не 12, если вычислять в январе
...
Рейтинг: 0 / 0
Последняя дата месяца
    #39911033
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
найти данные за предыдущую неделю
Код: sql
1.
EXTRACT(WEEK FROM MY_DATE_FIELD) = EXTRACT(WEEK FROM DATEADD(-1 WEEK TO CURRENT_DATE))



за текущую неделю
Код: sql
1.
EXTRACT(WEEK FROM MY_DATE_FIELD) = EXTRACT(WEEK FROM CURRENT_DATE)
...
Рейтинг: 0 / 0
Последняя дата месяца
    #39911038
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

ты уверен, что тебе нужны записи за N-ый месяц\неделю, независимо от года ?
Ты уверен, что тебя устроит полный перебор таблицы ?
...
Рейтинг: 0 / 0
Последняя дата месяца
    #39911039
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
аа, этого я не учел...
спасибо
...
Рейтинг: 0 / 0
Последняя дата месяца
    #39911046
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, это тоже неправильно

если учесть, что сегодня 5 января, то
Код: sql
1.
2.
SELECT
  CURRENT_DATE - EXTRACT(WEEKDAY FROM CURRENT_DATE) + (7 - EXTRACT(WEEKDAY FROM CURRENT_DATE)) AS START_DATE_OF_WEEK,



выдает 12 января вместо 30 декабря.
...
Рейтинг: 0 / 0
Последняя дата месяца
    #39911089
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дата начала недели
Код: sql
1.
DATEADD(DAY, (EXTRACT(WEEKDAY FROM DATE '2020-01-10') * -1) +1, DATE '2020-01-10') AS WEEKSTART,



правильно?
...
Рейтинг: 0 / 0
Последняя дата месяца
    #39911093
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис> те вычисления были актуальны до firebird 2.1.

Ага. Это я к тому, что данный топик бы не возник,
даже если кто-то сам не может их соорудить - был
готовый "сборник выражений".

> З.Ы. В 4.0 ... ввели 22053491

Капец. А это в стандарте тоже есть (я не в курсе) ?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Последняя дата месяца
    #39911095
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

всё равно неправильно, если выпадает на воскресенье
Код: sql
1.
DATEADD(DAY, (EXTRACT(WEEKDAY FROM DATE '2020-01-26') * -1) +1, DATE '2020-01-26') AS WEEKSTART3,



в поле WEEKSTART3 будет следующий день, т.е. 27ое, а не начало недели 20ое.
...
Рейтинг: 0 / 0
Последняя дата месяца
    #39911097
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11> всё равно неправильно, если выпадает на воскресенье

Что именно неправильно и что ты пытаешься получить?

P.S. Удивляюсь, как можно программировать методом
тыка - не в смысле, что неправильно, а просто медленно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Последняя дата месяца
    #39911098
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот так получилось норм, проверил на понедельниках и воскресеньях

Код: sql
1.
DATEADD(DAY, (EXTRACT(WEEKDAY FROM DATE '2020-01-05' - 1) * -1), DATE '2020-01-05') AS WEEKSTART4,



теперь осталось получить дату конца недели, т.е. дату воскресенья
...
Рейтинг: 0 / 0
Последняя дата месяца
    #39911099
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
что ты пытаешься получить?


дату начала недели и дату конца недели, т.е. дату понедельника и дату воскресенья
просто в FB неделя начинается с воскресенья и с нуля, а не 1.
...
Рейтинг: 0 / 0
Последняя дата месяца
    #39911105
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11> просто в FB неделя начинается с воскресенья и с нуля, а не 1.

Это называется разница между международным и американским стандартом.
https://web.archive.org/web/20120606190207/http://volny.cz/iprenosil/interbase/ip_ib_code_timestamp.htm
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Последняя дата месяца
    #39911109
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

я знаю
...
Рейтинг: 0 / 0
Последняя дата месяца
    #39911110
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
надеюсь, это окончательный вариант

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SET TERM ^ ;

CREATE OR ALTER FUNCTION GET_FIRST_DAY_OF(PERIOD STRING16, D DATE2)
RETURNS DATE2
AS
BEGIN
  IF (D IS NULL) THEN
    D = CURRENT_DATE;

  IF ((UPPER(PERIOD) = 'WEEK') OR (UPPER(PERIOD) = 'W'))  THEN
    RETURN DATEADD(DAY, (EXTRACT(WEEKDAY FROM D - 1) * -1), D);

  IF ((UPPER(PERIOD) = 'MONTH') OR (UPPER(PERIOD) = 'M'))  THEN
    RETURN D + 1 - EXTRACT(DAY FROM D);
END
^

SET TERM ; ^
...
Рейтинг: 0 / 0
Последняя дата месяца
    #39911111
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, так ты утилитарку пишешь.

Не забудь выложить сюда (и остальные тоже, если ещё есть)
окончательный вариант, когда полностью оттестируешь -
может, кому-то пригодится.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Последняя дата месяца
    #39911113
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
Код: sql
1.
CREATE OR ALTER FUNCTION GET_FIRST_DAY_OF(PERIOD STRING16, D DATE2)


Добавлю, что STRING16 и DATE2 - это просто домены varchar(16) и Date соответственно.
...
Рейтинг: 0 / 0
Последняя дата месяца
    #39911129
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вдруг кому пригодится:

Код: sql
1.
2.
3.
4.
SELECT
D,  
EXTRACT( WEEKDAY FROM D)          AS AMERICAN,
EXTRACT( WEEKDAY FROM D - 1) + 1  AS ISO8601FROM T;


1=Monday, 2=Tuesday, ... 7=Sunday.
...
Рейтинг: 0 / 0
Последняя дата месяца
    #39911132
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хоть бы копирайт поставил. :)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25 сообщений из 57, страница 2 из 3
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Последняя дата месяца
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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