Autor Zpráva
notwist
Profil
Zdravím, potřeboval bych, prosím, pomoci.
Mám tabulku se záznamy, kde v jednom sloupci je položka datum splatnosti jako text. Hodnoty jsou např. 21.1.2012
Nyní potřebuji udělat SQL příkaz, kde mi vybere jen řádky, kde tento datum je např. menší než 1.1.2012. Je možné nějak převést text na datum v SQL nebo existuje jiný postup? Snažím se použít funkci CAST, ale nějak se mi nedaří. Děkuji moc za radu.
David
Tori
Profil
notwist:
Potřebujete ukládat datumy do sloupce typu DATE, pak se s tím bude snadno pracovat (nebo DATETIME, pokud tam jsou i časy).

Převod z řetězcového typu:
1. Přidejte si další sloupeček do tabulky (např. "tmp"), typu DATE (nebo DATETIME).
2. Uložte do sloupce "tmp" hodnoty ze sloupce s datumy, pomocí funkce STR_TO_DATE přeformátované na YYYY-MM-DD.
Pokud se všechna data převedla správně, můžete smazat starý sloupec s datumem a "tmp" přejmenovat.

Při čtení z DB můžete formátovat čas buď už v dotazu (DATE_FORMAT) nebo v PHP (strtotime + date / strftime)
notwist
Profil
Díky moc za radu. Vyzkouším :-)
peter555
Profil
notwist, notwist:
Zdravím vás, som začiatočník a pokúšam sa urobiť to, čo radil Tori vyššie, zatial bez toho preformátovávania.
Vytvoril som si v databáze v tabulke stenata1 nový stĺpec aktualizovane1 a do neho sa pokusam dostat udaje zo stlpca aktualizovane.
moj kod vyzera takto:
$dotaz = "SELECT * FROM stenata1";        
$vysledok = mysql_query($dotaz);
while ($riadok = mysql_fetch_array($vysledok))         
{
$aktualizovane = $riadok['aktualizovane'];                
mysql_query("UPDATE stenata1 SET aktualizovane1 = $aktualizovane");
echo $aktualizovane;
}
to echo tam mam len pre taku kontrolu - a funguje - naozaj mi zobrazi vsetky udaje zo stlpca aktualizovane.
V databaze sa vsak vobec nic neudialo.
Kde moze byt chyba?
Pripadne nenapisete mi presne ten kod, ako to urobit, pripadne uz aj s tym preformatovanim?
Dakujem.
Peter
juriad
Profil
peter555:
Přesněji popiš svůj problém. Jak vypadá tabulka, jaké sloupce v ní jsou a čeho tím dotazem chceš docílit.
Zatím to vypadá na to, že se hodnotu ze sloupce aktualizovane snažíš překopírovat do sloupce aktualizovane1.
Na to stačí jediný jednoduchý dotaz:
UPDATE stenata1 SET aktualizovane1 = aktualizovane

Mimochodem, Tori je zástupkyní zde nepříliš početného něžného pohlaví :)
peter555
Profil
Ano, presne o to mi išlo, díky, super!, to som netušil, že sa to dá aj takto jednoducho - a funguje to!
No teraz ide o to, že v tom stlpci aktualizovane mam datumy v tomto tvare: 18. 02. 2014, 19:06 - ale chyba je, že je to stlpec typu varchar - je to teda ako text. Potrebujem to dostat do toho druheho stlpca ako datetime (už som ten typ stlpca zmenil na datetime).
juriad
Profil
UPDATE stenata1 SET aktualizovane1 = STR_TO_DATE(aktualizovane, '%d. %c. %Y, %H:%i')
http://sqlfiddle.com/#!2/954c34/1
Tori
Profil
peter555:
V databaze sa vsak vobec nic neudialo.
Jen doplním - v [#4] byla chyba v tom, že chyběly uvozovky nebo apostrofy okolo vkládané hodnoty (typ DATE se vkládá jako řetězec):
mysql_query("UPDATE stenata1 SET aktualizovane1 = '$aktualizovane'");
peter555
Profil
Ďakujem vám obom, ste super! Máte to u mňa. A keď budem v koncoch, tak sa zase ozvem. :-)
A čo vy vôbec nespíte? :-)

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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