Дата последнего дня недели в Firebird 3 - PullRequest
1 голос
/ 06 января 2020

Это дата первого дня недели (понедельник) в Firebird 3:

DATEADD(DAY, (EXTRACT(WEEKDAY FROM D - 1) * -1), D)

А как получить дату последнего дня недели (воскресенье)?

В Firebird: Пн = 1, Вт = 2, ... Солнце = 0.

1 Ответ

2 голосов
/ 06 января 2020

Для недель ISO-8601, где понедельник является первым днем ​​недели, вы также можете определить понедельник, используя:

dateadd(day, 0 - mod(extract(weekday FROM d) + 6, 7), d)

Использование mod(extract(weekdays from d) + 6, 7) приведет к понедельнику 0, вторнику 1 и т. Д. c и воскресенье 6, чтобы упростить вычисления.

Затем вы можете определить воскресенье, используя:

dateadd(day, 6 - mod(extract(weekday FROM d) + 6, 7), d)

Вы можете легко получить другие дни недели таким образом (например, используйте 1 - mod(extract(weekday FROM d) + 6, 7) для вторника и т. д. c.

С другой стороны, если воскресенье является первым днем ​​недели (например, в США), вы можете использовать:

dateadd(day, 0 - extract(weekday from d), d)

и на понедельник

dateadd(day, 1 - extract(weekday from d), d)
...