Portál AbcLinuxu, 10. května 2025 13:55

Dotaz: nefunkcni LIKE pro typ timestamp v postgresql

13.8.2009 21:55 tomas
nefunkcni LIKE pro typ timestamp v postgresql
Přečteno: 581×
Odpovědět | Admin
Dobry den, prosim o radu, mam v tabulce sloupec "datum", ktery je datoveho typu timestamp jsou v nem data ve formatu napr "2007-12-12 14:12:33" a snazim se v selectu pouzit v podmince WHERE "LIKE" aby si pak uzivatel mohl vypis na strance filtrovat podle mesicu v jednotlivych rocich:

SELECT datum FROM tabulka WHERE datum LIKE "2009-10%"

Coz dostanu chybu:

ERROR: syntax error at or near "WHERE" LINE 1: select datum from tabulka LIMIT 10 WHERE datum LIKE... Pouzivam Postgresql 8.3. Nevite cim to je?

Ř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

13.8.2009 22:06 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: nefunkcni LIKE pro typ timestamp v postgresql
Odpovědět | | Sbalit | Link | Blokovat | Admin
Operátor like je řetězcový operátor. Buď si to nejdřív zkonvertujte na string nebo (lépe) použijte funkci, která vám z toho data vytáhne příslušnou složku. Vůbec nejlepší ale bude spočítat si začátek a konec toho intervalu a použít normální porovnávání.
Řešení 1× (vlasta)
okbob avatar 14.8.2009 07:23 okbob | skóre: 30 | blog: systemakuv_blog | Benešov
Rozbalit Rozbalit vše Re: nefunkcni LIKE pro typ timestamp v postgresql
Odpovědět | | Sbalit | Link | Blokovat | Admin

Jestli mohu poradit, tak k tomuhle LIKE zásadně nepoužívejte. Věřím, že se Vám skrz LIKE pohodlně navrhne univerzální vyhledávací dialog, ale to je asi tak všechno. Nikdy se Vám nechytne index, a na větších tabulkách to bude pomalé - poněvadž se timestamp musí konvertovat z nativního formátu do varcharu. Košer způsob je upravit vyhledávací dialog a umožnit zadávat dotazy:

SELECT * FROM tabulka WHERE datum::date > date '2009-10-01' AND datum::date < date '2009-10-01' + interval '1 month';

Uvidíte, jak databáze může být rychlá (když se jí neházejí klacky pod nohy :)).

Jinak chybu ve Vašem dotazu způsobují uvozovky. V PostgreSQL, stejně tak jako ve všech ANSI SQL databázích se uvozovky používají ke specifikaci určitým způsobem nestandardního identifikátoru. Nikoliv řetězce.

tj. správně má být WHERE datum LIKE '2009-10-%'

Ale opět jestli mohu doporučit - LIKE používejte pouze na nativní varchar - ještě lépe fulltext.

http://www.postgres.cz/index.php/Kr%C3%A1tk%C3%A1_%C3%BAvaha_ohledn%C4%9B_zneu%C5%BE%C3%ADv%C3%A1n%C3%AD_LIKE_v_datab%C3%A1z%C3%ADch

 

14.8.2009 07:45 tomas
Rozbalit Rozbalit vše Re: nefunkcni LIKE pro typ timestamp v postgresql
Dekuju,

datum::date > date '2009-10-01' AND datum::date < date '2009-10-01' + interval '1 month';

funguje vyborne
14.8.2009 12:27 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: nefunkcni LIKE pro typ timestamp v postgresql
s malou chybkou: nemáte vo výsledku zahrnutý údaj zhodný s '2009-10-01' (t.j. '2009-10-01 00:00:00')
okbob avatar 14.8.2009 13:13 okbob | skóre: 30 | blog: systemakuv_blog | Benešov
Rozbalit Rozbalit vše Re: nefunkcni LIKE pro typ timestamp v postgresql

jasne - ta podminka ma byt >= AND <

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.