Autor Zpráva
okolojsoucí
Profil
Zdravím,

v databázi mám následující tabulku
| id | datum | hodnota |

ve sloupečku datum mám uložený datum ve tvaru 2014-02-24 18:00:32 tzn. timestamp. Rád bych se zeptal jestli je možno vybrat všechny data která obsahují datum pouze 2014-02-24 bez ohledu na čas.

Děkuji
janbarasek
Profil
okolojsoucí:
Pokud se jedná o MySql, tak bys mohl určitě v SQL příkazu uvést parametr like a určit, že se má hledat hodnota "2014-02-24" ve sloupečku "datum". Parametr like hledá vždy přesný výskyt nějakého řetězce v čemkoli, myslím že v tomto případě je to ideální řešení, protože to je snadno přizpůsobitelné a měnitelné.

Jinak obecně doporučuji čas ukládat jako Universal time (už jsem o tom psal), lepší se s tím pracuje (co se týče rychlosti) a navíc to může být uloženo jako Integer, což šetří výkon a paměť.
abc
Profil
LIKE bude imho pomalejší než např:
SELECT * FROM tabulka WHERE CAST(datum AS DATE) = '2014-02-24'
okolojsoucí
Profil
janbarasek:
Díky za radu, ale mě se s time() blbě pracuje, navíc svou aplikaci již mám rozdělanou.

abc:
Díky ti! Pomohlo.
Tori
Profil
nebo WHERE DATE(datum) = '2014-02-24' Timestamp/datetime je správná volba.

janbarasek:
doporučuji čas ukládat jako Universal time (už jsem o tom psal)
Zaujala mě tahle věta: „[Obecné vlastnosti tohoto zápisu:] Je v desítkové soustavě, takže je i pro lidi dobře čitelné.“ - to myslíte vážně, že pro někoho je 1393349925 čitelnější, než 2014-02-24 18:39:00? Případně zjištění rozdílu ve dnech jako SELECT (1393349925 - datum1) / 86400 místo SELECT DATEDIFF(datum, CURRENT_DATE)?
Úspora místa na disku je taky relativní - INT se sice ukládá vždy jako 4bajtové zatímco DATETIME jako 8bajtové. Ale pokud mi stačí typ DATE nebo TIME, tak ty zaberou 3 bajty.
janbarasek
Profil
okolojsoucí:
Díky za radu, ale mě se s time() blbě pracuje
Je to věc názoru, time() si můžeš kdykoli přeformátovat do jiného tvaru, proto ho mám tak rád.

Tori:
to myslíte vážně, že pro někoho je 1393349925 čitelnější, než 2014-02-24 18:39:00?
To ne, bylo to myšlené tak, že číslo v desítkové soustavě je lépe čitelné, než ve dvojkové soustavě. Navíc se pak lepší počítá rozdíl nějakých 2 datů (protože to je jako číslo, takže neřešíš mnoho problémů s tím spojených).
Kajman
Profil
okolojsoucí:
Rád bych se zeptal jestli je možno vybrat všechny data která obsahují datum pouze 2014-02-24 bez ohledu na čas.

Nejlépe
where datum between '2014-02-24' and '2014-02-24 23:59:59'

Verze s cast a date funkcemi nad sloupcem zničí možnost využít případného indexu nad tím sloupcem.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: