Portál AbcLinuxu, 17. května 2025 22:19

Dotaz: select from data type date

11.11.2009 20:04 Milan
select from data type date
Přečteno: 800×
Odpovědět | Admin
Ahoj, trapim se se selectem ze sloupce, ktery je data type date a jmenuje se CREATE_DAT a ma tam data zobrazena napr. takto 24.8.2009 22:02:08

Takze, potrebuju select radku jehoz datum je napr. 10.6.2009 a muj select vypada nasledovne :

select * from tabulka where CREATE_DAT like '10.6.2009%' ;

a nic nevyleze, tak delam neco spatne.

Muzete mi poradit?

Diky,

Milan


Ř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

11.11.2009 20:45 ZAH | skóre: 43 | blog: ZAH
Rozbalit Rozbalit vše Re: select from data type date
Odpovědět | | Sbalit | Link | Blokovat | Admin
Používáš textové porovnání na datum, to není dobré i kdyby to fungovalo. Třeba pro postgre SQL by to bylo .. where date_trunc('day', CREATE_DAT) = TIMESTAMP '2009-06-10' nebo pomocí EXTRACT(field FROM source)
11.11.2009 20:46 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: select from data type date
Odpovědět | | Sbalit | Link | Blokovat | Admin

Přesně stejný dotaz už tu před nedávnem byl. Operátor like je určen pro řetězcové operátory, není moc dobrý nápad zkoušet ho používat pro datum. Použijte např.

  select * from TABULKA where CREATE_DAT>='10.6.2009' and CREATE_DAT<'11.6.2009'
11.11.2009 20:58 Milan
Rozbalit Rozbalit vše Re: select from data type date
Ahoj, dotaz je nad Oracle 11g. Vyzkousel jsem obe varianty, ale vratilo mi to prazdny radek a pritom tam ta data jsou. Milan
11.11.2009 21:00 Milan
Rozbalit Rozbalit vše Re: select from data type date
Jeste zkusim jineho klienta. Pouzivam zabu. Milan
11.11.2009 21:02 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: select from data type date
Možná je potřeba použít jiný formát data, např. '2009-06-10'.
11.11.2009 21:44 Milan
Rozbalit Rozbalit vše Re: select from data type date
Ahoj, moje chyba. Uz to funguje. Dal jsem CREATE_DAT>='10.6.2009' and CREATE_DAT<'10.6.2009' misto CREATE_DAT>='10.6.2009' and CREATE_DAT<'11.6.2009' Diky za pomoc, Milan

Marián Oravec avatar 12.11.2009 08:53 Marián Oravec | skóre: 22 | Nitra
Rozbalit Rozbalit vše Re: select from data type date
Nie je vhodné "hádať" formát, pretože je závislý od nastaveného NLS_LANG.

Najvhodnejšie je použiť funkcie trunc() a to_date():

SELECT * FROM table t WHERE trunc(t.datum, 'dd') = to_date('12.11.2009', 'dd.mm.yyyy');

Mám rád elektro, ale vypočujem si aj iné...
12.11.2009 09:48 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: select from data type date
To není tak úplně pravda, protože jakmile tu podmínku zapíšete takhle, tak optimalizátoru výrazně přiděláte práci a dost možná úplně znemožníte použití indexu.
Marián Oravec avatar 12.11.2009 12:28 Marián Oravec | skóre: 22 | Nitra
Rozbalit Rozbalit vše Re: select from data type date
Chcel som len upozorniť na to, že dátum by sa mal zadávať cez funkciu (napr. to_date()).

V každom prípade máte pravdu, v horeuvedenom prípade sa index nevyužije. Lepšie je to použiť takto:

SELECT * FROM table t WHERE t.datum >= to_date('12.11.2009', 'dd.mm.yyyy') AND t.datum < to_date('13.11.2009', 'dd.mm.yyyy');

Mám rád elektro, ale vypočujem si aj iné...
12.11.2009 14:03 Ivan
Rozbalit Rozbalit vše Re: select from data type date
Presne tak. Funkce to_date by se mela pouzit VZDY kdyz porovnavate/konvertujete string a date. Jinak muzete zazit velice neprijemna prekvapeni. To ze to zrovna nahodou funguje i bez te funkce neni zadny argument.
14.11.2009 20:40 kuka
Rozbalit Rozbalit vše Re: select from data type date
No ono to nefunguje "nahodou", ale podle jasnych pravidel. Pokud bych si napriklad otevrel sveho oblibeneho SQL klienta a nastavil si spravne NLS_LANG, tak si muzu v ad-hoc dotazech neustale vypisovani to_date usetrit a nicemu to nevadi. Ale pokud to ma byt skript nebo kod v package, tak tam samozrejme by se to_date melo pouzivat.
15.11.2009 10:52 Ivan
Rozbalit Rozbalit vše Re: select from data type date
Ta pravidla mohou byt dost zakerna. Napr. 10g ignoruje nastaveni NLS_DATE_FORMAT pokud nemate nestaveny NLS_LANG. Na 9i to fungovalo. V ad-hoc dotazech to nevadi, ale treba pres OCI se vam muze povest vlozit datum, ktere nema korektni format. Cteni radky s takovym datumem skonci s nejakou silenou chybou.
default avatar 14.11.2009 20:30 default | skóre: 22 | Madrid
Rozbalit Rozbalit vše Re: select from data type date
Odpovědět | | Sbalit | Link | Blokovat | Admin
SELECT
    *
FROM
    tabulka tab1
WHERE
    TRUNC(tab1.create_dat) = TO_DATE('2009-08-24', 'YYYY-MM-DD')
/

Výchozí ořezání je na den — odstranění času.

Pro zlepšení výkonu pak ještě:

CREATE INDEX idx_tabulka_cd_t ON tabulka (TRUNC(create_dat))
/

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.