1

Temat: Wykluczenie świąt z wyniku zapytania

Witam, mam proste zapytanie wybierające dane z bazy danych z określonego przedziału czasu:

SELECT imie, nazwisko FROM ludzie WHERE dodano BETWEEN '01-01-2012' AND '31-12-2012';

Pytanie brzmi:
czy da się w jakiś sposób wyświetlić ludzi, którzy zostali dodani tylko w dni robocze? Innymi słowy pole 'dodano' nie może zawierać daty, która wypada w weekend lub jakieś święto.

2

Odp: Wykluczenie świąt z wyniku zapytania

dopisz sobie w klauzuli where
and EXTRACT(ISODOW FROM dodano) < 6 and dodano::date not in ('2012-01-06',
'2012-04-09',
'2012-05-01',
'2012-05-03',
'2012-06-07',
'2012-08-15',
'2012-11-01',
'2012-12-25',
'2012-12-26',
'2013-01-01',
'2013-04-01',
'2013-05-01',
'2013-05-03',
'2013-05-30',
'2013-08-15',
'2013-11-01',
'2013-11-11',
'2013-12-25',
'2013-12-26')

Ostatnio edytowany przez c_michal (2013-02-01 13:36:16)

3

Odp: Wykluczenie świąt z wyniku zapytania

Genialne, dzięki.

4

Odp: Wykluczenie świąt z wyniku zapytania

Mam jeszcze jedno pytanie:
Jak wyliczyć ilość dni wolnych w zadanym okresie? Przykładowo w okresie od 01-02-2012 do 28-02-2012 było 8 dni wolnych (liczymy wszystkie soboty, niedziele i święta).

5

Odp: Wykluczenie świąt z wyniku zapytania

może tak:
select count(*) as dni_wolne
from generate_series ('2012-02-01','2012-02-28',interval '1 day') d
where EXTRACT(ISODOW FROM d) >= 6 or d::date in ('2012-01-06',
'2012-04-09',
'2012-05-01',
'2012-05-03',
'2012-06-07',
'2012-08-15',
'2012-11-01',
'2012-12-25',
'2012-12-26',
'2013-01-01',
'2013-04-01',
'2013-05-01',
'2013-05-03',
'2013-05-30',
'2013-08-15',
'2013-11-01',
'2013-11-11',
'2013-12-25',
'2013-12-26');