Portál AbcLinuxu, 29. července 2025 08:38


Dotaz: Rozsah datumu

23.10.2016 22:38 Hafajs | skóre: 12
Rozsah datumu
Přečteno: 415×
Odpovědět | Admin
Zdravim vsechny. Do tohoto dotazu:

query = ("SELECT * FROM `firma` WHERE `datum` BETWEEN '2016-10-01' AND '2016-10-31';")

potrebuji dostat vzdy rozsah od 1. do posledniho aktualniho mesice. Zkousel jsem si naplnit promenne jako soucrok = now.tm_year, soucmesic=now.tm_mon..., ale neumim to "poskladat" do tvaru napriklad 2016-10-01. Pripadne existuje-li nejaky elegantni zpusob jak ziskat potrebny retezec, uvitam jej. Dekuji moc za pomoc

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Jendа avatar 23.10.2016 22:50 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Rozsah datumu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Neumím identifikovat co je to za jazyk. Nejspíš to bude mít funkci která vrací zformátované datum, pak si stačí vytisknout %Y-%M-01 a u toho druhého bych asi zjistil (vlastním kódem) kolik dnů měsíc má a přeplácnul to tam.
23.10.2016 22:53 Hafajs | skóre: 12
Rozbalit Rozbalit vše Re: Rozsah datumu
jj moje chyba, nejak jsem zapomel zminit, ze je to Python :D
23.10.2016 23:01 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Rozsah datumu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jestli to potřebuješ od prvního do posledního, tak to můžeš napsat třeba takto:
SELECT * FROM firma WHERE year(datum)=2016 AND month(datum)=10;
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
23.10.2016 23:04 Hafajs | skóre: 12
Rozbalit Rozbalit vše Re: Rozsah datumu
To zni genialne jednoduse, to mne nenapadlo. Super, jdu to nahodit a vyzkouset! Dik, funkcnost tu potvrdim ;)
Řešení 1× (Hafajs (tazatel))
23.10.2016 23:15 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Rozsah datumu
Ještě jsem našel jedno řešení, které možná bude o něco rychlejší:
SELECT * FROM firma WHERE extract(YEAR_MONTH FROM datum)='201610';
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
23.10.2016 23:18 Hafajs | skóre: 12
Rozbalit Rozbalit vše Re: Rozsah datumu
OK tohle je ono. Ten prvni kod vraci vzdy vsechny zaznamy bez ohledu na datum. Ale tohle je hezky a dela to co potrebuji. Diky!
24.10.2016 00:46 Hafajs | skóre: 12
Rozbalit Rozbalit vše Re: Rozsah datumu
Tvoje odpoved mne navedla jeste k jednomu, zde zminovanemu reseni, tak pro pripadne dalsi zajemce to sem jeste zkopiruju, take vyzkouseno a funkcni:

WHERE EXTRACT(YEAR_MONTH FROM DATE_SUB(pole_s_datumem, INTERVAL 1 MONTH)) = EXTRACT(YEAR_MONTH FROM DATE_SUB(NOW(), INTERVAL 1 MONTH))
25.10.2016 09:16 kaaja | skóre: 24 | blog: Sem tam něco | Podbořany, Praha
Rozbalit Rozbalit vše Re: Rozsah datumu
Jde-li ti o rychlost, tak bych se vyhnul používání funkce nad sloupcem a radši se pokusil zůstat u porovnávání s pevnými datumy. Pokud máš funkci nad sloupcem, tak se musí vyhodnotit pro všechny řádky a nepoužije se případný index. Na rozsah měsíc můžeš také použít datum >= '2016-10-01' and datum <'2016-11-01'
31.10.2016 08:22 Hafajs | skóre: 12
Rozbalit Rozbalit vše Re: Rozsah datumu
Diky za reakci. O rychlost v tomto pripade nejde, pocet zaznamu ze kterych se bude vybirat bude maly, radove stovky. Jde mi o to, abych mohl program spoustet cronem na konci mesice a on vybral vzdy zaznamy s rozsahem toho mesice.
31.10.2016 12:41 OldFrog {Ondra Nemecek} | skóre: 36 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: Rozsah datumu
Pokud je nad sloupcem funkcionální index, tak se použije předpočítaná hodnota a je to rychlé. Otázka je, zda to db umí. Postgres například ano.
-- OldFrog

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.