Autor | Zpráva | ||
---|---|---|---|
notwist Profil |
#1 · Zasláno: 18. 1. 2012, 10:22:20
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 |
#2 · Zasláno: 18. 1. 2012, 12:26:01
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 |
#3 · Zasláno: 18. 1. 2012, 15:03:40
Díky moc za radu. Vyzkouším :-)
|
||
Časová prodleva: 2 roky
|
|||
peter555 Profil |
#4 · Zasláno: 8. 5. 2014, 23:03:57
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; } 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 |
#6 · Zasláno: 8. 5. 2014, 23:51:05
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 |
#7 · Zasláno: 9. 5. 2014, 00:27:34
UPDATE stenata1 SET aktualizovane1 = STR_TO_DATE(aktualizovane, '%d. %c. %Y, %H:%i') |
||
Tori Profil |
#8 · Zasláno: 9. 5. 2014, 02:20:44
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 |
#9 · Zasláno: 9. 5. 2014, 10:00:09
Ď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? :-) |
||
Časová prodleva: 11 let
|
0