Gast
Unregistrierter Benutzer
|
Geschrieben: 15.08.2006 22:49
Hi,
ich bin gerade dabei diverse Datenbestände aus meiner PHPNuke-Installation nach OPN zu migrieren. Dazu mache ich mir diverse Selects, erzeuge mit TOAD for MySQL die Insert-Statements und spiele diese auf der neuen DB ein.
Das geht relativ flott, allerdings stehe ich jetzt von einem Problem:
Das DATE-Format in OPN sieht mir etwas eigenartig aus...
Es ist weder ein aufbereitetes Format, noch ein unix_timestamp - sondern irgendetwas anderes. Ich würde nur ungerne sämtliche Datümer in meiner Datenbank verlieren.
Bitte um einen Tipp, wie ich ein "normales Datum" (z.B. '15.08.2006 21:35:50') in das OPN-Format umwandeln kann. Ich brauche keine fertige Lösung, sondern nur einen Hinweis bzw. die Berechnungsformel. Ich habe mich zwar durch den Code gehantelt, aber bin nicht wirklich schlauer geworden (OPN ist so streng geschachtelt, dass man als Laie sich dauernd im Kreis dreht) - programmiertechnisch ist das natürlich die Wucht (selten sowas gut strukturiertes gesehen).
Einzige Bedingung für den erhofften Vorschlag: Das ganze sollte mit MySQL-Bordmitteln (functions!) machbar sein, sonst kann ich meinen Weg vergessen. Sollte das klappen, kann ich die Scripts nebst einer kurzen Anleitung gerne der Allgemeinheit zur Verfügung stellen.
Danke,
Boby [addsig]
|
Gast
Unregistrierter Benutzer
|
Geschrieben: 20.08.2006 00:17
Mann,
das war echt eine harte Nuss!!!
Die zweistufige Nummer war mir zu aufwändig, denn dann bin ich auch noch in der Skriptprogrammierung drinnen - und das ist mir im Moment etwas zuviel.
Hier mein Code - zur freien Verwendung, für jeden der's haben möchte:
select sid, time as 'time_________',
substr(time,1,2) as century,
substr(time,3,2) as year,
substr(time,6,2) as month,
substr(time,9,2) as day,
substr(time,12,2) as hour,
substr(time,15,2) as minute,
substr(time,18,2) as second,
/*century*/
floor(146097*(substr(time,1,2))/4)+
/*year*/
floor((1461*(case when substr(time,6,2) <= 2
then substr(time,3,2)-1
else substr(time,3,2)
end))/4)+
/*month*/
floor((153*((case when substr(time,6,2) > 2
then substr(time,6,2)-3
else substr(time,6,2)+9
end))+2)/5)+
/*day*/
((substr(time,9,2))+1721119) +
/*time: h,m,s*/
((substr(time,12,2) * 3600) +
(substr(time,15,2) * 60) +
(substr(time,18,2)))/100000 as wdate
from nuke_stories;
Eigentlich ist nur die wdate-Spalte wichtig, der Rest ist nur zur Dokumentation bzw. Kontrolle vorhanden.
Es gab einen Punkt, der mir nicht ganz klar war:
if ($month>2)
{
$month -= 3;
} else {
$month += 9;
if ($year) {
$year--;
} else {$year = 99;
$century--;
}
}
Habe ich das richtig interpretiert? Wenn kein Jahr übergeben wurde, dann nimm' 99 an, falls schon, dann ziehe ein Jahr ab? Falls ja, dann ist es zumindest mir egal - ich habe keine Datümer aus dem alten Millenium.
Ciao,
Boby [addsig]
[ Diese Nachricht wurde bearbeitet von: Boby am 20.08.2006 00:36 (Originaldatum 20.08.2006 00:17) ]
|