MySQL dátum konvertalas

MySQL dátum konvertalas

Hozzászólások

mysql Ver 12.22 Distrib 4.0.26, for portbld-freebsd6.0 (amd64)

Van egy ilyenem:

[code:1:80d2b0170e]
+--------------+
| user_regdate |
+--------------+
| Apr 17, 2005 |
+--------------+
[/code:1:80d2b0170e]

[code:1:80d2b0170e]
+-----------------------+----------------------+------+-----+----------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+----------------------+------+-----+----------------+----------------+
| user_regdate | varchar(20) | | | | |
[/code:1:80d2b0170e]

Ebbol szeretnek unixtime-ot csinalni, mysql-ben. Lehetseges? Es ha igen, akkor hogy?

A masik

[code:1:80d2b0170e]
+------------+
| pdate |
+------------+
| 11-30-2002 |
+------------+
[/code:1:80d2b0170e]

[code:1:80d2b0170e]
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| pdate | varchar(48) | | | | |
| ptime | varchar(48) | | | | |
+----------+-------------+------+-----+---------+----------------+
[/code:1:80d2b0170e]

Szinten unixtime kellene. Szinten MySQL-ben.

_Szerintem_ csak Mysql-lel nem lehet megcsinálni. De php-val igen. Előre bocsájtom, hogy (még) nem vagyok egy nagy mysql/php tudor -ilyenmódon lehet, hogy hüllleeséget mondok de legalább jószándékkal teszem azt-. Én valahogy úgy csinálnám hogy:
1 az adatbázis adott oszlopát és az azonosítot egy datum.sql fájlba.
2 ezt beolvasnám phpbe karakterlánc müveletekkel megállapítanám a napot, hónapot, évet. (a hónapok neveit pedig karakterlánc cserével numerikus értékké cserélem)
3 azt a time függvényel átalakítanám unixtime-ba
4 Az egész egy ciklusba van amig a datum sgl végéig ér majd kiiratnám egy ujdatum.sqlbe
5 a régi dátuminformációt replace into sql lekérdezéssel felülirnám.

Van nekem egyilyesmi kódom arra szolgál hogy egy űrlapról kapott dátumot pl: 2006-01-15 átalakítsa unixtimeá.

Remélem segítettem.
[code:1:7d2a2cb1e1]
//$idopont=$_POST['Hatarido'];
$ev=substr($idopont,0,4);
$ho=substr($idopont,5,2);
$nap= substr($idopont,8,2);
$Hatarido=mktime (0,0,0,$ho,$nap,$ev);
[/code:1:7d2a2cb1e1]

Hat igen. Valami ilyesmire jutottam en is. Marmint hogy tisztan MySQL-lel nem lehet. Suck. Egyik tablabol kell atvinni ugy 10 ezer sort. Ezert lenne jobb MySQL atalakitassal.

[quote:d54c27e222="hunge"]_Szerintem_ csak Mysql-lel nem lehet megcsinálni. De php-val igen. Előre bocsájtom, hogy (még) nem vagyok egy nagy mysql/php tudor -ilyenmódon lehet, hogy hüllleeséget mondok de legalább jószándékkal teszem azt-. Én valahogy úgy csinálnám hogy:
1 az adatbázis adott oszlopát és az azonosítot egy datum.sql fájlba.
2 ezt beolvasnám phpbe karakterlánc müveletekkel megállapítanám a napot, hónapot, évet. (a hónapok neveit pedig karakterlánc cserével numerikus értékké cserélem)
3 azt a time függvényel átalakítanám unixtime-ba
4 Az egész egy ciklusba van amig a datum sgl végéig ér majd kiiratnám egy ujdatum.sqlbe
5 a régi dátuminformációt replace into sql lekérdezéssel felülirnám.

Van nekem egyilyesmi kódom arra szolgál hogy egy űrlapról kapott dátumot pl: 2006-01-15 átalakítsa unixtimeá.

Remélem segítettem.
[code:1:d54c27e222]
//$idopont=$_POST['Hatarido'];
$ev=substr($idopont,0,4);
$ho=substr($idopont,5,2);
$nap= substr($idopont,8,2);
$Hatarido=mktime (0,0,0,$ho,$nap,$ev);
[/code:1:d54c27e222]

[quote:e6f4a68bbf="trey"]Hat igen. Valami ilyesmire jutottam en is. Marmint hogy tisztan MySQL-lel nem lehet. Suck. Egyik tablabol kell atvinni ugy 10 ezer sort. Ezert lenne jobb MySQL atalakitassal.

10.000 rekord php+mysql-vel sem tart egy-ket percnel tovabb. (parancssorban kell futtatni apgp scriptet)

sajnos ez 10.000 + 1 mysql csatlakozas.

oregon: és ha kiiratod az adatbázis majd azt átalakítod? Akkor szerintem nem kell ennyi csatlakozás.

Más: vicces hogy én is pont nemrégiben jöttem rá, hogy a dátum információkat date típusban illik tárolni. Szerencsére a program amit csinálok még _eléggé_ fejlesztési stádiumba van szóval megengedhetem magam hogy keresztül-kasul átírjam. Ja amugy ez az első progim annak is még csak a fele szóval itt még szvsz elmegy.

hunge: sztm nem kell fileokkal szorakozni, s akkor 1 kapcsolat eleg:
phbol csinalsz egy uj date tipusu mezot a tablaba, a regibol kiveszed, atkonvertalod a datumot, es belerakod az uj mezobe. Sokkal gyorsabb mint fileokkal.

Szerintem ha lemented CSV-be és feldolgozod utána PERL-el, majd újra feltöltöd akkor elég jól jársz, a perl nagyon jó szövegfeldolgozásban. Pontos példát még nem nagyon tudok mondani, most tanulgatom.

biboka: perl tenyleg jo szovegfeldolgozasban, viszont a te megoldasodban is
ott egy csomo i/o muvelet pluszban (fileiras/olvasas), es igy meg szegeny sracnak perlezni is meg kene tanulnia:) Es ha idore megy a projekt ez kellemetlen:) De amugy tenyleg powerful a perl.

Meg lehetne imho csinalni mysql-lel is. Csak nem 4.0-val. Egy csomo fuggveny kesobb jelent meg (pl str to date). Ha 4.1.1 vagy ujabb lenne semmi bajom nem lenne :-D

hat akkor frissits, hisz 4.0.x mar eleg regi darabnak szamit.

t

Az tiszta sor, de ebbe ez lett volna a kihivas. Azt hittem csak en nem tudom megcsinalni igy :-D De ezek szerint nem lehet. Legalabbis ezt mondta mindenki.

[quote:8e42ce175a="tibyke"]hat akkor frissits, hisz 4.0.x mar eleg regi darabnak szamit.

t

atviszed a tablat egy 4.1es mysql-be, megcsinalod a konvertalast, majd vissza lapatolod az eredetibe.. 8)

[quote:8bc900ea22="Elbandi"]atviszed a tablat egy 4.1es mysql-be, megcsinalod a konvertalast, majd vissza lapatolod az eredetibe.. 8)

esetleg meg atfuttathatja egy python wrapperen es egy JSP-n, majd postgresql 8.0.1-bol kinyerve mar talan jo lesz!

Na kerem, megiscsak van megoldas :-)

Boobaa megoldotta:

Elso:

[code:1:3856b6f21f]
S ELECT UNIX_TIMESTAMP( CONCAT( SUBSTRING( user_regdate FROM 9 FOR 4 ) , "-", LPAD( FIELD( SUBSTRING( user_regdate FROM 1 FOR 3 ) , 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ) , 2, '0' ) , "-", SUBSTRING( user_regdate FROM 5 FOR 2 ) ) ) FROM ahonnan;[/code:1:3856b6f21f]

Masodik:

[code:1:3856b6f21f]
S ELECT UNIX_TIMESTAMP( CONCAT( SUBSTRING( pdate FROM 7 FOR 4 ) , "-", SUBSTRING( pdate FROM 1 FOR 2 ) , "-", SUBSTRING( pdate FROM 4 FOR 2 ) ) ) FROM ahonnan;[/code:1:3856b6f21f]

Ezennel megkapta az SQL Jedi cimet 8)

(a S ELECT nem veletlenul van kulon irva..., nyilvan egyben az igazi)

[quote:a6c1fdd246="hunge"]oregon: és ha kiiratod az adatbázis majd azt átalakítod? Akkor szerintem nem kell ennyi csatlakozás.

jogos :)