MySQL a vyber podle datumu (exclude weekend)

Karel Zak zakkr na zf.jcu.cz
Pondělí Červen 10 10:39:09 CEST 2002


On Mon, Jun 10, 2002 at 09:54:17AM +0200, Vladimír Náprstek wrote:
> Dobrý den,
> nějak nemohu přijít na elegantní řešení problému: potřebuji spočítat čas mezi dvěma datumy, 
> ale jen v pracovní dny - t.j. nezapočítávat/odečíst doboty a neděle. Nebo alespoň určit, 
> kolik sobot a nedělí je v daném časovém rozmezí.

 Jak dlouha by mela byt radka slusne vychovaneho mailu? :-)

 Neukazu to v MySQL, protoze bych musel koukat to manualu atd. Ale
 myslim, ze jen s malou zmenou v nazvech funkci by to snad melo jit
 take.

 Je treba znat: cislo tydne - dle ISO je prvni tyden to co ma minimalne
 ctvrtek. To znamena, ze je tam nedele i sobota. Takze pocet tydnu * 2
 by snad mel byt pocet volnych dni.

 Rozmeci 3 az 22 Cervna:

Pocet nepracovnich dni:

test=# select (date_part('W', '2002-06-22'::date) - 
               date_part('W', '2002-06-03'::date)) * 2;
----------
        4


Pocet vsech dni:

test=# select (date_part('D', '2002-06-22'::date) - 
               date_part('D', '2002-06-03'::date));
----------
       19


Vysledek:
 
test=# select (date_part('D', '2002-06-22'::date) - 
               date_part('D', '2002-06-03'::date)) - 
                   (date_part('W', '2002-06-22'::date) - 
                    date_part('W', '2002-06-03'::date)) * 2;
----------
       15


Coz? Je nutne jen, aby funkce, ktera vraci 'W' (cislo tydne) pocitala tydny 
jako to dela kalendar. Napr. v Oracle je v to_char() 'W', ktere to pocita jako 
pocet_dni / 7, coz je blbost -- vhodny na otestovani je rok 2005 kdy je 1.1
v sobotu a tato sobota tak patri jeste do 53 tydne roku 2004.

        Karel

-- 
 Karel Zak  <zakkr na zf.jcu.cz>
 http://home.zf.jcu.cz/~zakkr/
 
 C, PostgreSQL, PHP, WWW, http://docs.linux.cz, http://mape.jcu.cz


Další informace o konferenci Databases